R ggplot 改变堆积条形图中一个变量的颜色

5

我有一个数据框D长这样:

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的颜色设为白色,这样的操作是否可行?此外,为了简化本帖子中的说明,我使用了虚拟数据。实际使用的数据可能会在图例下有10个或更多不同的变量,因此逐个编写每个十六进制颜色值并不是一个很好的选择。

感谢您的帮助。

2个回答

2
您可以使用scale_fill_manual(values = 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)

请查看我的评论,针对johnson_shuffle的回答。@vinchinzu - alki

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。我还在geom_bar()中添加了colour="black"。你可以尝试加上第二部分和不加的效果,看看哪个更好。


我正在使用的实际数据在图例下有很多变量。我认为列出10多个颜色对于我拥有的10多个变量来说不是一种干净的选项。但我知道最后一个变量将始终是我想要颜色为白色的变量... @johnson_shuffle - alki
说得好。请看我的编辑答案。最终这取决于您想对其他颜色有多少控制。顺便说一句,我刚学会ggplot()中的调色板是如何工作的,也就是上面的hcl()部分。 - johnson-shuffle
太棒了,这非常完美!谢谢。 - alki
h=seq(15,375,length=(x+1)),l=65,c=100[1:x] 这段代码是做什么用的?谢谢。 - Little Bee

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接