geom_area ggplot使用数据子集

时间:2018-05-08 06:46:12

标签: r ggplot2

我阅读了几篇关于如何使用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

Figure

1 个答案:

答案 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)