我阅读了几篇关于如何使用geom_area
函数填充上述geom_ribbon
图的帖子,但没有一篇也处理过数据子集。
考虑以下数据和图表。我只是想填写一个阈值,在这个例子中是25(y轴),但也只在每个月内的几天内填充,在这种情况下在第2天和第12天之间填写。总之,必须满足两个标准。为了填补,我试图顺利填补。
我可以通过使用approx
函数在我的线上插入很多点来改进下面的图表,但它仍然无法处理我的子集并在几个月之间连接填充线。
library(ggplot2)
y = sample(1:50)
x = seq(as.Date("2011-12-30"), as.Date("2012-02-17"), by="days", origin="1970-01-01")
z = format(as.Date(x), "%d")
z=as.numeric(z)
df <- data.frame(x,y,z)
plot<-ggplot(df, aes(x=x, y=y)) +
geom_area(fill="transparent") +
geom_ribbon(data=subset(df, z>=2 & z<=12), aes(ymin=25, ymax=ifelse(y< 25,20, y)), fill = "red", alpha=0.5) +
geom_line() +
geom_hline(yintercept = 25, linetype="dashed") +
labs(y="My data") +
theme_bw(base_size = 22)
plot
答案 0 :(得分:1)
data=subset(df, z>=2 & z<=12)
从数据框中删除行,因此geom_ribbon的数据“丢失”。
而不是为y值子集化附加条件可能会让您更接近您想要实现的目标:
plot<-ggplot(df, aes(x=x, y=y)) +
geom_area(fill="transparent") +
geom_ribbon(data=df, aes(ymin=25, ymax=ifelse((z>=2 & z<=12), ifelse(y < 25, 20, y), 25)), fill = "red", alpha=0.5) +
geom_line() +
geom_hline(yintercept = 25, linetype="dashed") +
labs(y="My data") +
theme_bw(base_size = 22)