2015-07-20 114 views
5

我有像這樣的數據幀Dřggplot改變一個變量的顏色在堆積條形圖

Track <- c(0,0,0,-1,1,1) 
Length <- c(1,1,2,1,3,1) 
Legend <- c("A","B","A","C","B","C") 
D <- data.frame(Track,Length,Legend) 

D 
# Track Length Legend 
#  0  1  A 
#  0  1  B 
#  0  2  A 
# -1  1  C 
#  1  3  B 
#  1  1  C 

我目前使用此代碼繪製它:

ggplot(Z, aes(x=Track, y=Length, fill=Legend)) + 
     geom_bar(stat='identity') + geom_point() + expand_limits(x=0,y=0) + 
     theme(panel.grid.major = element_blank(), panel.grid.minor = element_blank(), 
      panel.background = element_blank(), axis.line = element_line(colour = "black")) 

而圖表看起來像這樣: enter image description here

但是我想將顏色白色分配給變量B.此操作是否可行?此外,爲了簡單起見,我在本文中使用了虛擬數據。我將要使用的實際數據可能在Legend下有10個或更多不同的變量,因此寫出每個十六進制顏色看起來不是一個乾淨的選項。

感謝您的幫助

回答

2

這是否產生你在做什麼?

x <- length(levels(factor(Legend))) 
x.colors <- hcl(h=seq(15,375,length=(x+1)),l=65,c=100)[1:x] 
x.colors[x] <- "white" 

ggplot(D, aes(x=Track, y=Length, fill=Legend)) + 
    geom_bar(stat='identity',colour="black") + geom_point() + expand_limits(x=0,y=0) + 
    scale_fill_manual(values=x.colors) + 
    theme(panel.grid.major = element_blank(), panel.grid.minor = element_blank(), 
     panel.background = element_blank(), axis.line = element_line(colour ="black")) 

我加了scale_fill_manual()指定顏色給A,B和C.我還加了colour="black"geom_bar()。你可以在沒有第二部分的情況下嘗試,看看你的想法。

+0

我使用的實際數據在Legend下有很多變量。我不認爲列出超過10個顏色的10個變量,我有一個乾淨的選擇。我知道最後一個變量總是我想變成白色的變量...... @johnson_shuffle – ALKI

+0

不夠公平。看到我編輯的答案。最終這取決於你想要多少控制其他顏色。順便提一句,我剛剛學會了'ggplot()'中的調色板是如何工作的,它是上面的'hcl()'部分。 –

+0

太棒了,這是完美的!謝謝 – ALKI

2

可以使用scale_fill_manual(值= C(..然後你的十六進制顏色」

ggplot(D, aes(x=Track, y=Length, fill=Legend)) + 
     geom_bar(stat='identity') + scale_fill_manual(values=c("#000000","#FFFFFF", "#00FF00")) 

也可以使用

# The palette with grey: 
cbPalette <- c("#999999", "#E69F00", "#56B4E9", "#009E73", "#F0E442", "#0072B2", "#D55E00", "#CC79A7") 

# The palette with black: 
cbbPalette <- c("#000000", "#E69F00", "#56B4E9", "#009E73", "#F0E442", "#0072B2", "#D55E00", "#CC79A7") 

# To use for fills, add 
    scale_fill_manual(values=cbPalette) 

# Use a different gradient 
    scale_colour_gradientn(colours=rainbow(4)) 

    # To use for line and point colors, add 
     scale_colour_manual(values=cbPalette) 
+0

請參閱我對johnson_shuffle的回答的評論。 @vinchinzu – ALKI