如何在ggplot堆叠柱状图的y=-1位置添加Ellenberg值均值
解决方案
要在堆叠柱状图的y=-1位置添加Ellenberg均值,你可以通过以下步骤修改代码:
1. 补全均值数据框的Quadrat匹配列
在处理col_meansdf的代码段末尾,添加与tally中格式一致的Quadrat列,方便后续绘图时定位:
col_meansdf <- col_meansdf[,c(1,3,4)] # 生成和tally中一致的Quadrat列 col_meansdf$Quadrat <- paste0(sub("Q", "X", col_meansdf$Q), "_", col_meansdf$Year)
2. 在ggplot中添加均值文本层
修改stacked绘图代码,加入geom_text来绘制均值,同时扩展y轴范围确保文本可见:
stacked <- ggplot(tally, aes(fill=Ellenberg, y=n, x=Quadrat)) + geom_bar(position='stack', stat='identity') + # 添加均值文本,指定数据源为col_meansdf,固定y=-1 geom_text(data = col_meansdf, aes(x = Quadrat, y = -1, label = round(values, 2)), inherit.aes = FALSE, size = 3, color = "gray50") + # 扩展y轴下限,避免文本被截断 expand_limits(y = c(-1.5, NA)) + ggtitle(dfName) + labs(x='Year', y='Number of Plants') + scale_x_discrete(labels=labels) + scale_fill_manual(values = colLegend) + theme_classic() + facet_wrap(~ Q, nrow=1, scales='free_x')
关键说明
inherit.aes = FALSE:避免继承主绘图的fill和y映射,因为均值文本不需要填充色,y值固定为-1round(values, 2):将均值保留两位小数,让文本更简洁易读color = "gray50":设置文本颜色为灰色,避免和柱状图颜色冲突expand_limits(y = c(-1.5, NA)):把y轴下限扩展到-1.5,确保均值文本完整显示
内容的提问来源于stack exchange,提问作者Melanie Baker
相关产品推荐
相关产品推荐

