R语言:基于转置数据框绘制分组条形图的技术问询
解决按Cluster分组绘制省份对应n值的条形图问题
嘿,我完全懂你的需求啦!你想要以cluster为分组,在每个组里展示不同filteredprovince对应的n值条形图对吧?其实核心是先把数据调整成ggplot最适配的长格式——如果你的数据现在是转置后的宽格式,咱们先转个型,之后绘图就简单多了。
第一步:准备工具与数据转换
首先加载必要的R包,tidyverse里包含了ggplot2绘图工具和数据重塑的tidyr:
library(tidyverse)
如果你的数据是宽格式(比如cluster是行标识,各个filteredprovince作为列名,列内的值就是n),用pivot_longer把它转成ggplot需要的长格式:
# 把宽格式转为长格式,适配ggplot d_long <- d %>% pivot_longer( cols = -cluster, # 除了cluster列,其他都是省份列 names_to = "filteredprovince", # 列名转为省份名称 values_to = "n" # 列内的值转为n字段 )
如果你的数据已经是长格式(包含cluster、filteredprovince、n三列),这一步可以直接跳过。
第二步:绘制符合需求的条形图
这里提供两种常用的可视化方式,你可以根据需求选择:
1. 分组并排条形图
适合同时对比同一cluster内不同省份的数值,以及跨cluster的整体差异:
ggplot(d_long, aes(x = factor(cluster), y = n, fill = filteredprovince)) + geom_col(position = position_dodge(width = 0.8)) + # 让同组条形并排,避免重叠 labs( title = "各Cluster下不同省份的数值分布", x = "Cluster", y = "数值(n)", fill = "省份" ) + theme_minimal() + theme( plot.title = element_text(hjust = 0.5, size = 14, face = "bold"), axis.text.x = element_text(size = 10) )
2. 分面独立条形图
更聚焦每个cluster内部的省份对比,视觉上更清晰,适合cluster数量较多的情况:
ggplot(d_long, aes(x = filteredprovince, y = n)) + geom_col(fill = "#2E86AB", alpha = 0.8) + # 设置条形颜色与透明度 facet_wrap(~cluster, ncol = 2) + # 按cluster分面,每行显示2个子图 labs( title = "每个Cluster内省份的数值情况", x = "省份", y = "数值(n)" ) + theme_minimal() + theme( plot.title = element_text(hjust = 0.5, size = 14, face = "bold"), axis.text.x = element_text(angle = 45, hjust = 1, size = 9) # 旋转x轴标签避免重叠 )
如果你的数据结构和假设的有差异(比如列名不同),只需要对应调整代码里的列名就行,核心逻辑是一致的~
内容的提问来源于stack exchange,提问作者davide cortellino
相关产品推荐
相关产品推荐

