如何在ggpairs的条形图及分组条形图上方添加标签?
给ggpairs绘制的条形图/分组条形图添加标签
完全可以给ggpairs中的条形图和分组条形图添加数值标签,核心思路是修改ggpairs返回的ggmatrix对象中的子图,为目标子图添加geom_text()或geom_label()图层。
具体实现步骤及代码
- 先运行原始代码生成可视化对象:
library(GGally) data(diamonds, package="ggplot2") set.seed(123) # 设置随机种子保证结果可复现 diamonds.samp <- diamonds[sample(1:nrow(diamonds), 1000), ] pm <- ggpairs( diamonds.samp[, 1:5], mapping = ggplot2::aes(color = cut), upper = list(continuous = wrap("density", alpha = 0.5), combo = "box_no_facet"), lower = list(continuous = wrap("points", alpha = 0.3), combo = wrap("dot_no_facet", alpha = 0.4)), title = "Diamonds" )
- 单独修改指定子图
比如给对角位置的cut条形图(坐标[2,2])添加频数标签,给cutvscolor的分组条形图(坐标[2,3])添加标签:
# 给对角的cut条形图加标签 pm[2,2] <- pm[2,2] + geom_text(stat = "count", aes(label = after_stat(count)), vjust = -0.5, size = 3, color = "black") # 给cut vs color的分组条形图加标签 pm[2,3] <- pm[2,3] + geom_text(stat = "count", aes(label = after_stat(count)), position = position_dodge(width = 0.9), vjust = -0.5, size = 3, color = "black")
- 批量处理所有离散变量的子图
如果需要给所有离散变量对应的条形图/分组条形图批量加标签,可以通过循环实现:
# 找出所有离散变量的列索引 discrete_cols <- which(sapply(diamonds.samp[,1:5], is.factor)) # 遍历所有离散变量交叉的子图 for (i in discrete_cols) { for (j in discrete_cols) { pm[i,j] <- pm[i,j] + geom_text(stat = "count", aes(label = after_stat(count)), # 对角条形图用identity位置,分组条形图用dodge对齐 position = ifelse(i == j, "identity", position_dodge(0.9)), vjust = -0.5, size = 3, color = "black") } }
- 输出修改后的可视化:
pm
关键参数说明
stat = "count":自动计算每个条形的频数,无需手动统计after_stat(count):引用统计计算得到的频数数值position = position_dodge(0.9):匹配分组条形图的位置,保证标签和对应条形对齐vjust = -0.5:将标签向上偏移,避免和条形顶部重叠
内容的提问来源于stack exchange,提问作者Ahir Bhairav Orai
相关产品推荐
相关产品推荐

