我尝试根据值是高于还是低于0.5为ggplot条形图指定颜色。
下面是可重现的代码,图中没有指定颜色。
dnow <- data.frame(x=rep(c("protected areas","wildnerness areas","private lands","multi-use lands"), each=25), y=runif(100))
ggplot(dnow,aes(x=x, y=y)) + stat_summary(fun.y=mean, geom="bar", position=position_dodge(1)) +
stat_summary(fun.data = mean_se,geom="errorbar", color="grey40",position=position_dodge(1), width=.2) +
geom_hline(yintercept = 0.5) + labs(y="Mean Agreement") + theme_bw() +
theme(panel.grid.major = element_blank(),panel.grid.minor = element_blank(), axis.title.y=element_blank()) +
coord_flip()
根据以下stackoverflow问题(Setting a conditional color by stat_summary in ggplot),我尝试使用aes
中的stat_summary
根据阈值0.5手动分配颜色,以便值大于0.5的条形图是绿色和值小于0.5的条形图为红色。
代码和输出如下。然而,该图表看起来不正确。它创建了两个带有&#34; true&#34;或&#34;假&#34;而不是根据阈值着色单个条。不知道如何解决这个问题。
ggplot(dnow,aes(x=x, y=y)) + stat_summary(fun.y=mean, geom="bar", aes(fill = y > 0.5), position=position_dodge(1)) +
stat_summary(fun.data = mean_se,geom="errorbar", color="grey40",position=position_dodge(1), width=.2) +
geom_hline(yintercept = 0.5) + labs(y="Mean Agreement") + theme_bw() +
theme(panel.grid.major = element_blank(),panel.grid.minor = element_blank(), axis.title.y=element_blank()) +
scale_fill_manual(values = c('red', 'green')) + coord_flip()
答案 0 :(得分:2)
您只需将y
更改为..y..
中的aes
即可。虽然最好先手动汇总数据,然后使用与您关联的帖子类似的geom_bar
。这应该有效:
ggplot(dnow,aes(x=x, y=y)) + stat_summary(fun.y=mean, geom="bar", aes(fill = ..y.. > 0.5), position=position_dodge(1)) +
stat_summary(fun.data = mean_se,geom="errorbar", color="grey40",position=position_dodge(1), width=.2) +
geom_hline(yintercept = 0.5) + labs(y="Mean Agreement") + theme_bw() +
theme(panel.grid.major = element_blank(),panel.grid.minor = element_blank(), axis.title.y=element_blank()) +
scale_fill_manual(values = c('red', 'green')) + coord_flip()
..y..
是指来自fun.y
的计算均值。
答案 1 :(得分:0)
原因是您使用数据框中的原始值进行着色,而不是使用计算的摘要统计信息。默认情况下,分组将发生在每个离散变量上:在您的情况下,x和值&gt; 0.5。因此,统计摘要功能将计算8组的均值,并根据此对颜色进行着色。我不知道根据计算方法直接着色的方法。但是,您可以预先计算每个组中的均值,并根据此预先计算的平均值进行着色:因此,每个x都有一个均值。