2015-07-20 83 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