ggplot2:为直方图柱形添加填充值均值标注
问题描述
我用直方图可视化两个变量的关系,分箱柱形采用渐变色填充,以此展示数值变量在分箱中的变化趋势。为了更直观呈现,希望在每个柱形上方添加该分箱对应的填充变量均值(每个柱顶标注对应building_dissimilarity的均值),现有代码如下,请问如何修改代码实现这个效果?
p <- df2 %>% mutate(dist2init = cut(x = dist2init, breaks = hist(dist2init, breaks = 0:1500 * 100, plot = FALSE)$breaks, labels = hist(dist2init, breaks = 0:1500 * 100, plot = FALSE)$mids)) %>% group_by(dist2init) %>% summarize(n = n(), building_dissimilarity = mean(building_dissimilarity)) %>% ggplot(aes(x = as.numeric(as.character(dist2init)), y = n, fill = building_dissimilarity)) + scale_x_continuous(limits = c(0, 1500), name = "Distance to initiator") + geom_col(width = 100) + xlab('Distance to block leader')
解决方案
只需在ggplot代码中添加geom_text()或geom_label()层,直接调用已计算好的building_dissimilarity均值即可实现标注,修改后的完整代码如下:
p <- df2 %>% mutate(dist2init = cut(x = dist2init, breaks = hist(dist2init, breaks = 0:1500 * 100, plot = FALSE)$breaks, labels = hist(dist2init, breaks = 0:1500 * 100, plot = FALSE)$mids)) %>% group_by(dist2init) %>% summarize(n = n(), building_dissimilarity = mean(building_dissimilarity)) %>% ggplot(aes(x = as.numeric(as.character(dist2init)), y = n, fill = building_dissimilarity)) + scale_x_continuous(limits = c(0, 1500), name = "Distance to initiator") + geom_col(width = 100) + # 新增柱顶标注层 geom_text(aes(label = round(building_dissimilarity, 2)), vjust = -0.5, # 调整标注与柱顶的垂直距离,负数表示在柱顶上方 size = 3) + # 设置标注文字大小 xlab('Distance to block leader')
细节调整说明:
round(building_dissimilarity, 2):将均值保留两位小数,让标注更简洁,可根据需求修改小数位数vjust参数:控制标注的垂直位置,数值越小(更负),文字离柱顶越远;若想让文字部分落在柱形内,可设为正数(如vjust = 1.2)- 若需要带背景框的标注,替换
geom_text()为geom_label()即可
内容的提问来源于stack exchange,提问作者TvCasteren
相关产品推荐
相关产品推荐

