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

在ggplot中无需转换,为两个独立变量绘制双坐标轴柱状图

在ggplot中无需数据转换绘制双y轴柱状图

直接给你可运行的代码方案,假设你的数据是宽格式(和你图片里的结构一致,包含类别列+两个独立变量列):

模拟数据(匹配你的数据结构)

df <- data.frame(
  category = c("组1", "组2", "组3", "组4"),
  var1 = c(120, 150, 90, 180), # 第一个变量
  var2 = c(25, 32, 18, 38)    # 第二个变量
)

绘图代码

library(ggplot2)

# 计算转换系数,让第二个变量的范围适配主y轴
coef <- max(df$var1) / max(df$var2)

ggplot(df, aes(x = category)) +
  # 第一个变量的柱状图
  geom_col(aes(y = var1), fill = "#2E86AB", width = 0.4) +
  # 第二个变量的柱状图,偏移位置避免重叠,同时乘以系数适配主轴
  geom_col(aes(y = var2 * coef), fill = "#F24C4E", width = 0.4, position = position_nudge(x = 0.4)) +
  # 设置双y轴
  scale_y_continuous(
    name = "变量1",
    sec.axis = sec_axis(~ . / coef, name = "变量2") # 反向转换得到第二个变量的真实刻度
  ) +
  labs(x = "类别", title = "双y轴柱状图") +
  theme_minimal()

关键说明

  • 无需把数据转成长格式,直接用原宽格式的两列变量
  • 转换系数coef是自动计算的,不用手动凑数,确保第二个变量的柱子能正常显示
  • 用position_nudge偏移第二个柱子,避免和第一个重叠
  • 注意:ggplot官方不推荐使用双y轴,因为容易造成数据误导,非必要尽量不用这种展示方式

内容的提问来源于stack exchange,提问作者synat

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 22:05:22