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

如何判断双轴柱状图左右Y轴并调整ggplot双轴位置?

双Y轴柱状图调整及轴判断方法

一、调整轴位置:将Accumulated RFU轴置于上方

你使用了coord_flip(),ggplot会交换X/Y轴的显示位置——原主Y轴会变成下方的水平轴,次Y轴会变成上方的水平轴。要实现RFU轴在上、OD600轴在下的效果,需要交换主/次轴的定义,同时调整Y值的映射逻辑,确保柱状图高度匹配对应轴的刻度:

修改后的代码如下(coeff仍为5000):

coeff <- 5000

ggplot(mean_sum_long, aes(x = Nitrogen_Source, 
                          y = ifelse(name == "gfp_mean", value/coeff, value), 
                          fill = name)) +
  geom_col(position = "dodge", alpha = 0.8) +
  scale_y_continuous(
    name = "Accumulated OD600",  # 主轴(翻转后显示在下方)
    sec.axis = sec_axis(~ . * coeff, name = "Accumulated RFU")  # 次轴(翻转后显示在上方)
  ) +
  scale_fill_manual(values = c("green", "tomato")) +
  theme(axis.text.y = element_text(angle = 30, vjust = 0.5)) +  # 翻转后原X轴变为Y轴,调整文本角度
  coord_flip()

逻辑说明:

  1. 先把RFU数值(gfp_mean)按比例缩小到OD600的刻度范围(value/coeff),确保两类柱子的高度在同一坐标系下合理显示
  2. 将OD600设为主轴(对应下方水平轴),RFU设为次轴(通过~.*coeff把主轴刻度还原为RFU的实际数值,对应上方水平轴)

二、双Y轴的左右/上下判断方法

未使用coord_flip()时:

  • scale_y_continuous()定义的是左侧主Y轴,对应你原始数据中直接映射到y=value的数值
  • sec_axis()定义的是右侧次Y轴,基于主轴线性转换得到

使用coord_flip()后:

  • 原左侧主Y轴 → 变为下方的水平轴
  • 原右侧次Y轴 → 变为上方的水平轴
  • 快速验证:临时注释掉coord_flip(),观察原始的左右轴对应关系,就能对应到翻转后的上下轴位置

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 23:50:33