如何在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
相关产品推荐
相关产品推荐

