You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 09:03:09