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

如何使用R的ggplot2绘制分组柱状图?

如何使用R的ggplot2绘制分组柱状图?

我太懂这种困惑了!ggplot2绘制分组柱状图的关键其实是数据格式——它更喜欢「长格式」的数据,而你现在从MySQL拿到的是「宽格式」,所以第一步得先把数据转个型,之后绘图就很顺了。我一步步给你演示:

1. 先确认你的数据结构

首先先模拟一下你从MySQL拿到的数据(你直接替换成自己实际的数据框就行):

# 模拟你的数据(替换成你用RMySQL读取的真实数据框)
df <- data.frame(
  Category = c("A", "B"),
  Dataset1 = c(30, 70),
  Dataset2 = c(60, 40)
)

2. 把宽格式转成长格式

ggplot需要每一行对应一个数据点,所以我们用tidyr包的pivot_longer函数转换格式(tidyr属于tidyverse全家桶,和ggplot2是一伙的,直接加载tidyverse就行):

# 加载tidyverse(包含ggplot2和数据处理工具)
library(tidyverse)

# 转换数据格式:把Dataset1、Dataset2列转成"数据集"和"数值"两列
df_long <- df %>%
  pivot_longer(
    cols = -Category,          # 除了Category列,其他列都要转换
    names_to = "Dataset",      # 原来的列名(Dataset1/Dataset2)存在这个新列里
    values_to = "Value"        # 原来的数值存在这个新列里
  )

转换后的数据长这样:

CategoryDatasetValue
ADataset130
ADataset260
BDataset170
BDataset240

3. 绘制分组柱状图

现在就可以用ggplot轻松画出分组柱状图了:

ggplot(df_long, aes(x = Category, y = Value, fill = Dataset)) +
  geom_col(position = position_dodge()) +  # position_dodge()让柱子并排分组,不堆叠
  labs(
    title = "分组柱状图",
    x = "类别",
    y = "数值",
    fill = "数据集"  # 图例的标题
  ) +
  theme_minimal()  # 可选,换个清爽的主题

关键细节解释

  • fill = Dataset:用不同颜色区分两个数据集的柱子
  • position = position_dodge():这是实现「分组」的核心参数,如果去掉它,柱子会默认堆叠在一起,就不是你想要的分组效果啦

如果你的数据是从MySQL直接读取的,只需要把第一步里的df换成你实际的数据集名称(比如你用dbGetQuery()得到的对象)就行,完全不用改其他代码~

备注:内容来源于stack exchange,提问作者Norman D

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.22 11:48:12