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

ggplot2绘制双Y轴组合图(柱状展示X1、折线展示百分比)报错如何解决

报错原因

  • 代码拼写错误:scale_y_continous 正确写法为 scale_y_continuous
  • 次轴转换规则不符合要求:sec_axis 要求传入固定的单调转换公式,原代码直接引用数据集列percent作为转换参数,不是固定规则,触发报错
  • 数值范围不匹配:左Y轴对应X1的取值范围是4002200,percent取值范围是3080,直接用percent作为折线y值会导致折线贴在X轴底部,和柱状图完全错位
  • 数据源重复:数据集每年对应2行(item A/B),直接绘制折线会出现重复线条

修正后代码

# 先计算固定缩放系数,用于两个Y轴的数值线性映射
coeff <- max(df$X1) / max(df$percent)

ggplot(df, aes(x = factor(year))) +
  # 柱状图部分,对应左Y轴
  geom_col(aes(y = X1, fill = item), position = 'dodge2') +
  # 折线图部分:对年份去重后绘制,y值乘缩放系数适配左轴范围
  geom_line(data = ~dplyr::distinct(.x, year, percent),
            aes(y = percent * coeff, group = 1),
            color = "#E64B35", linewidth = 1) +
  # 可选:添加折线对应点,辨识度更高
  geom_point(data = ~dplyr::distinct(.x, year, percent),
             aes(y = percent * coeff),
             color = "#E64B35", size = 3) +
  # 配置双Y轴,次轴除以缩放系数还原百分比数值
  scale_y_continuous(
    name = "X1数值",
    sec.axis = sec_axis(~./coeff, name = "百分比(%)")
  ) +
  labs(x = "年份", fill = "分类") +
  theme_minimal()

逻辑说明

  1. 提前计算固定的线性缩放系数coeff,满足次轴对单调转换规则的要求
  2. 折线的y值先乘以coeff匹配左Y轴的数值范围,避免和柱状图错位
  3. 右Y轴通过除以coeff把左轴数值还原为原始百分比,保证数值显示正确
  4. 用distinct处理折线数据源,保证每年只有一个percent数值,避免重复绘制
  5. 年份转为因子类型,避免ggplot将年份识别为连续数值,出现多余的X轴刻度

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 12:36:03