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

R ggplot改变堆叠条形图中一个变量的颜色,r,ggplot2,R,Ggplot2,我有一个数据框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 # -

我有一个数据框
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
图表如下所示:

但是,我想将白色指定给变量B。这种操作可能吗?此外,为了简单起见,我在这篇文章中使用了虚拟数据。我将使用的实际数据在图例下可能有10个或更多不同的变量,因此写出每个十六进制颜色看起来不像是一个干净的选项


感谢您的帮助

您可以使用scale\u fill\u手册(值=c(…然后是十六进制颜色)

也可以用

# 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)
#灰色调色板:

cbPalette这会产生你想要的东西吗

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"))

x我使用的实际数据在图例下有许多变量。我不认为为我拥有的10+变量列出10+颜色是一个干净的选择。我知道最后一个变量将始终是我想要的白色变量,尽管…@johnson\u shufflair足够了。请参阅我编辑的答案。最终这取决于控制的程度ol你想要比其他颜色更好。顺便说一句,我刚刚了解了
ggplot()
中的调色板是如何工作的,这就是上面的
hcl()
部分。太棒了,这太完美了!谢谢你做了什么
h=seq(15375,length=(x+1)),l=65,c=100[1:x]
do?谢谢你,请看我对johnson\u shuffle回答的评论。@vinchinzu
# 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)
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"))