我想在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)
但这会为每个图产生绿色和红色吗?
任何帮助将不胜感激。 抱歉,这是一个简单的解决方案-我对堆叠式条形图没有太多的经验。
提前谢谢!
答案 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)
结果:
希望它可以澄清您的问题!