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

如何在R语言中绘制带反转次坐标轴的柱状图?

双柱状图次坐标轴反转实现方案

问题说明

需要生成流量(蓝色柱向上)、降水量(红色柱向下)的双柱状图,且降水量对应的次坐标轴为反转状态,当前代码存在主y轴反转、柱子重叠的问题,无法达到目标效果。

修正后代码

library(tidyverse)

DF <- data.frame(Month = 1:12, 
                 Flow = c(1,2,5,30,45,50,40,25,15,10,4,1.2),
                 Prec = c(24,17,23,31,55,93,80,69,13,32,25,25))

ggplot(DF, aes(x = Month)) +
  # 流量柱子:映射主y轴,向上延伸
  geom_bar(aes(y = Flow), stat = "identity", color = "blue", fill = "blue", width = 0.4) +
  # 降水量柱子:用负数值映射,实现向下延伸,0.5为缩放比例
  geom_bar(aes(y = -Prec * 0.5), stat = "identity", color = "red", fill = "red", width = 0.4) +
  scale_y_continuous(
    name = "流量",
    # 设置y轴范围,确保两个柱子完整显示
    limits = c(-max(DF$Prec)*0.5, max(DF$Flow)),
    # 次坐标轴:反转刻度,同时将负映射值转换为正降水量数值
    sec.axis = sec_axis(~ -. / 0.5, name = "降水量 (mm)", trans = "reverse")
  ) +
  theme_minimal()

关键修改点

  • 降水量柱子使用负数值映射(-Prec*0.5),使其沿x轴向下延伸,与流量柱分离
  • 主y轴设置包含正负区间的范围,避免柱子被截断
  • 次坐标轴通过trans = "reverse"实现反转效果,并用~ -. /0.5将负的映射值还原为正的降水量刻度
  • 调整柱子宽度(width=0.4),避免两个柱子重叠

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 16:00:27