首页 > 解决方案 > R - 使用 geom_ribbon 以不同颜色为线条下方/上方的区域着色

问题描述

我有一个简单的折线图,它在零附近波动。使用geom_ribbon,我想用两种不同的颜色为线和零之间的区域着色,具体取决于线是高于还是低于零。使用单一颜色填充该区域有效:

geom_ribbon,单色

但是,我尝试以不同颜色填充该区域(遵循此解决方案)失败,因为创建了两个单独的色带,它们连接零以下或零以上的点。

df%>%
ggplot(aes(x=month, dif))+
geom_line()+
scale_x_date(date_breaks = "1 month", guide = guide_axis(angle = 90))+
geom_ribbon(aes(x=month, ymin=0, ymax=dif,  fill= dif>0), alpha=.5)+
scale_fill_manual(values=df$filler, name="fill")

在此处输入图像描述

关于如何解决这个问题的任何建议?

可重复的样品:

df<-structure(list(month = structure(c(17532, 17563, 17591, 17622, 
17652, 17683, 17713, 17744, 17775, 17805, 17836, 17866), class = "Date"), 
high = c(2618.74, 2453.39, 2075.89, 2535.89, 3331.15, 2238.85, 
3013.85, 3073.36, 2348.01, 3410.8, 653.56, 2840.22), low = c(3445.45, 
1352.91, 1594.51, 1344.27, 1676.73, 2410.76, 1289.4, 1330.72, 
1824.69, 1843.76, 1500.12, 3252.97), filler = c("red", "lightblue", 
"lightblue", "lightblue", "lightblue", "red", "lightblue", 
"lightblue", "lightblue", "lightblue", "red", "red"), dif = c(-826.71, 
1100.48, 481.38, 1191.62, 1654.42, -171.91, 1724.45, 1742.64, 
523.32, 1567.04, -846.56, -412.75)), class = c("tbl_df", 
"tbl", "data.frame"), row.names = c(NA, -12L))

标签: rggplot2linegraphaestheticsgeom-ribbon

解决方案


推荐阅读