ggplot2条形图标签,用于按多列分组的数据的一列

时间:2015-12-10 22:19:15

标签: r ggplot2 bar-chart

我有一个条形图,x轴标签按2列值分组。在图中,我想将一列(method)值显示为图例,并将另一列(variable)标记为图表本身上的标签,以便于阅读图片。但是,由于另一列的分组,图表上的每个标签都会重复出现。如何为唯一值设置单个标签而不是重复它。?

示例数据和当前输出如下。

df <- data.table(w = rep(1:3, each = 3), 
        value = c(1.83,1.83,1.94,1.78,.95,1.09,3.14,3.14,3.14),
        method = seq(letters[1:3]),
        variable = c("fit","fit","fit","lwr","lwr","lwr","upr","upr","upr"))
ggplot(df,aes(x=w, y=value, color=factor(variable), fill=factor(method))) +
        geom_bar(stat="identity", position = "dodge") +
        geom_text(aes(label=paste(variable)), position = position_dodge(width =0.9),vjust=-.25) +
        theme_bw() +
        scale_y_log10(breaks=c(1,2,11,101,1001),labels=c(0,1,10,100,1000)) +
#       facet_wrap(~ppm) +
        annotation_logticks(sides = "lr")

enter image description here

1 个答案:

答案 0 :(得分:1)

我很喜欢说 ggplot2非常善于绘制你提供的数据。您用作标签的变量具有正在绘制的重复:

variable<-c("fit","fit","fit","lwr","lwr","lwr","upr","upr","upr")

如果您不想重复,请创建一个没有它的变量用作标签:

 df$label = ifelse(df$method == "b", as.character(df$variable), NA)

然后在aes(label = label)来电中使用geom_text()

我还建议不要同时使用映射到条形图中不同变量的fillcolor,但这取决于您。至少,如果您在geom_text()图层中定义颜色映射而不是在绘图初始化中,则条形图将不会出现冲突的颜色轮廓。