使用双Y轴时如何在两条线之间填充区域(geom_ribbon)
使用双Y轴时如何在两条线之间填充区域(geom_ribbon)
嗨,我来帮你搞定双Y轴下用geom_ribbon填充两条线之间区域的问题~
首先得说清楚核心问题:你现在的两条线分别对应不同的Y轴刻度(左轴是GH2O,右轴是A),但geom_ribbon需要基于同一数值尺度的两个值来计算填充范围,所以直接用原始的A和GH2O肯定不行,得先把它们统一到同一个轴的刻度体系里。
你之前的代码里,右轴的A是通过A*20映射到左轴刻度来绘制的,那填充的时候我们也要沿用这个转换逻辑,用A*20和GH2O来计算上下限。
直接给你修改后的完整代码吧,把你原来的LightResp + geom_ribbon(...)部分替换成下面这段就行:
LightResp + # Add color between lines geom_ribbon( aes( x = DecimalTime, ymin = pmin(GH2O, A*20), # 取两个值里的较小值当填充下限 ymax = pmax(GH2O, A*20) # 取两个值里的较大值当填充上限 ), fill = "gray70", # 这里可以改成你喜欢的填充颜色 alpha = 0.3, # 加个透明度,避免填充色挡住线条 na.rm = TRUE # 如果数据有缺失值,加这个可以跳过缺失的部分,可选 )
给你解释下这段代码的关键点:
- 用
pmin()和pmax()是为了自动适配两条线的上下关系——不管在某个x位置上GH2O高还是A*20高,都能准确取到填充的上下限,不用你手动判断谁在上谁在下。 - 设置
alpha是为了让下面的红色和黑色线条还能清晰显示,不至于被填充色完全盖住。 - 如果你的数据集里有NA值,
na.rm = TRUE可以让填充区域在缺失的地方自动断开,不会出现奇怪的空白块(如果不需要可以删掉这个参数)。
这样修改后,填充区域就会准确出现在两条线之间,而且和双Y轴的显示完全匹配~
备注:内容来源于stack exchange,提问作者Theresa
相关产品推荐
相关产品推荐

