颜色堆叠的条形图,ggplot中的每个条都有唯一的颜色

时间:2020-02-21 14:36:08

标签: r ggplot2 colors bar-chart

我想在ggplot中制作一个堆叠的直方图,其中每个条(和堆叠的条)都有唯一的颜色-使用提供的十六进制值。

例如,使用此数据框。

Pct <- c(0.8026200, 0.1973800, 0.8316421, 0.1683579)
Site <- c("A","A","B", "B")
hex <- c("#53412F", "#B4A383", "#4E3B29", "#B6A37E")
bin <- rep(c(1,2), 2)

df <- as.data.frame(cbind(Site,Pct,hex,bin))

我想使用指定的十六进制颜色为相应的条着色。

我尝试了以下方法的变体:

ggplot()+
  geom_bar(aes(y=Pct, x=as.character(Site), fill=bin), data=df, stat="identity")+
  theme_bw() +
  scale_fill_manual("Subject", values=df$hex)

但这会为每个图产生绿色和红色吗?

任何帮助将不胜感激。 抱歉,这是一个简单的解决方案-我对堆叠式条形图没有太多的经验。

提前谢谢!

1 个答案:

答案 0 :(得分:2)

您的问题来自一些矛盾,我认为:您说要ggplot使用变量“ bin”将美学“填充”归因于。由于“ bin”只有两种可能性(“ 1”或“ 2”),因此ggplot仅使用2种颜色。它使用绿色和红色这两个第一。

我不确定您到底想要什么,但是如果您希望每个条形都有不同的颜色,那么您必须像下面的示例那样更改“ bin”,例如,或者给“ fill”提供另一个参数您可以将“ fill = bin”替换为“ fill = hex”。但是,如果要使用4种颜色,则“填充”中使用的变量必须具有4个不同的值(下面,我选择了“ bin”,其值分别为1,2,3,4)。

示例:

Pct <- c(0.8026200, 0.1973800, 0.8316421, 0.1683579)
Site <- c("A","A","B", "B")
hex <- c("#53412F", "#B4A383", "#4E3B29", "#B6A37E")

##bin is defined in order it has a different value for each bar
bin <- c(1,2,3,4)
df <- as.data.frame(cbind(Site,Pct,hex,bin))

ggplot()+
  geom_bar(aes(y=Pct, x=as.character(Site), fill=bin)
           , data=df, stat="identity")+
  theme_bw() +
  scale_fill_manual(values=hex)

结果:

enter image description here

希望它可以澄清您的问题!