ggplot双折线图双轴问题:刻度匹配错误及轴位调整需求
解决方案
要实现将avg_area_flow放在左侧主y轴、avg_conductance放在右侧次y轴,且两轴刻度差异约100倍的折线图,核心是对次轴对应的折线数据做数值转换,让折线位置和次轴刻度匹配。具体修改如下:
修改后代码
library(ggplot2) ggplot(TR_midday_avg, aes(x = day)) + # 绘制主y轴的area_flow折线 geom_line(aes(y = avg_area_flow, color = "面积流量"), linewidth = 1) + # 绘制次y轴的conductance折线:除以100匹配主y轴数值范围 geom_line(aes(y = avg_conductance / 100, color = "导度"), linewidth = 1) + scale_y_continuous( name = "树干液流(面积流量)", # 主y轴名称 # 次y轴:将主y轴数值乘以100,还原导度原刻度 sec.axis = sec_axis(~ . * 100, name = "导度") ) + scale_color_manual(values = c("面积流量" = "blue", "导度" = "red")) + labs(title = "正午树干液流与导度变化", x = "日期") + theme_minimal()
关键说明
- 转换系数依据:从数据片段看,
avg_conductance数值约为avg_area_flow的100倍(如15138/161≈94),选择100作为转换系数,符合刻度差异需求。 - 折线数据转换:绘制
avg_conductance时必须除以100,让折线y值范围与主y轴匹配,再通过次轴的~.*100还原出导度的原始刻度值。 - 颜色区分:添加颜色映射可清晰区分两条折线,避免混淆。
数据片段(中文翻译)
# 一个 tibble:6 × 7 日期 平均径向流量 平均面积流量 平均光合有效辐射 平均温度 平均水汽压亏缺 平均导度 <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> 1 103 0.610 161. 808 21.8 0.994 15138. 2 104 0.508 134. 759. 23.9 1.07 13884. 3 105 0.585 153. 890 18.2 1.71 8816. 4 106 0.511 133. 918. 17.9 0.922 16326. 5 107 0.482 124. 1055. 12.5 0.891 16999. 6 109 0.245 60.7 456. 9.38 0.652 23214.
内容的提问来源于stack exchange,提问作者DCB
相关产品推荐
相关产品推荐

