如何在R ggplot2的geom_step()中为中线上下区域填充不同颜色
实现ggplot2阶梯线PMI荣枯线上下区域分色填充
核心思路
要给geom_step()绘制的PMI阶梯线在50荣枯线上下填充不同颜色,关键是利用stat_step的阶梯坐标计算能力,结合geom_ribbon实现区域填充,无需手动拆分数据。
解决方案代码
假设你的数据框df包含date(日期列)、eu(欧元区PMI)、france(法国PMI)、germany(德国PMI)字段,按以下步骤实现:
- 加载依赖包并转换数据格式
library(ggplot2) library(tidyr) # 宽表转长表,方便多区域批量处理 df_long <- df %>% pivot_longer(-date, names_to = "region", values_to = "pmi")
- 绘制带分色填充的阶梯线图
ggplot(df_long, aes(x = date, y = pmi, color = region, fill = region)) + # 填充荣枯线下方(PMI ≤50)的区域 stat_step( aes(ymin = pmin(pmi, 50), ymax = 50), geom = "ribbon", alpha = 0.3, # 调整填充透明度 direction = "hv" # 对应geom_step默认的阶梯方向:先水平后垂直 ) + # 填充荣枯线上方(PMI ≥50)的区域 stat_step( aes(ymin = 50, ymax = pmax(pmi, 50)), geom = "ribbon", alpha = 0.3, direction = "hv" ) + # 绘制核心阶梯线 geom_step(linewidth = 1) + # 添加PMI荣枯线 geom_hline(yintercept = 50, linetype = "dashed", color = "gray50") + # 自定义标签与主题 labs( title = "欧元区、法国、德国PMI走势", x = "日期", y = "PMI", color = "区域", fill = "区域" ) + theme_minimal()
关键细节说明
stat_step直接复用阶梯线的坐标计算逻辑,避免手动生成阶梯数据的繁琐pmin()/pmax()用于将PMI值截断到50,精准划分上下填充区域direction参数需与geom_step保持一致:默认"hv"是先水平延伸再垂直跳转,若需垂直优先可改为"vh"- 调整
alpha值可平衡填充区域的辨识度与阶梯线的可读性
内容的提问来源于stack exchange,提问作者ah bon
相关产品推荐
相关产品推荐

