alpha不能在带有x变化的geom_rect()的分面线图上工作

时间:2016-08-10 16:50:23

标签: r ggplot2 alpha

我有这种格式的数据框:

df <- data.frame(
  time = rep(seq(from = as.POSIXct("2016-08-10 11:00:00"), 
         to = as.POSIXct("2016-08-10 12:00:00"), by="sec"), 2),
  value = c(diffinv(rnorm(3601)), diff(rnorm(3601))),
  facets = c(rep("A",3601), rep("B", 3601)),
  shading = rep(c(rep("x", 1500), rep("y", 750), rep("z", 1351)), 2),
  stringsAsFactors = FALSE
)

我可以使用value的{​​{1}}函数在共享x轴的单独图表上绘制ggplot2时间序列。我还想在我的情节中包含另一个维度 - 变量facet_grid以遮蔽背景。

我知道我可以通过指定阴影区域将覆盖的x轴范围来实现此目的:

shading

当我第一次设置时,我在每个xRange1 <- range(df$time[df$shading=="x"]) xRange2 <- range(df$time[df$shading=="y"]) xRange3 <- range(df$time[df$shading=="z"]) yRange <- range(df$value)

中添加了alpha
geom_rect

enter image description here

显然ggplot(df, aes(x = time, y = value)) + geom_line() + facet_grid(facets ~ ., scales = "free_y") + geom_rect(aes(xmin = xRange1[1], xmax = xRange1[2]), ymin = yRange[1], ymax = yRange[2], alpha = 0.3, fill = "#EEF2BF") + geom_rect(aes(xmin = xRange2[1], xmax = xRange2[2]), ymin = yRange[1], ymax = yRange[2], alpha = 0.3, fill = "#A3BAB6",) + geom_rect(aes(xmin = xRange3[1], xmax = xRange3[2]), ymin = yRange[1], ymax = yRange[2], alpha = 0.3, fill = "#BFA67E") 没有用。

解决这个问题的一种方法是将alpha放在最后:

geom_line()

enter image description here

但这隐藏了网格,并没有解决潜在的问题。

我查看了几篇帖子,但没有一篇文章直接解决这个问题。我已经看过在我的情节中使用其他功能,包括scale_fill_manual (页面上的最后一个示例)和scale_alpha

编辑:我怀疑最佳解决方案还涉及以较少的手动方式设置ggplot(df, aes(x = time, y = value)) + facet_grid(facets ~ ., scales = "free_y") + geom_rect(aes(xmin = xRange1[1], xmax = xRange1[2]), ymin = yRange[1], ymax = yRange[2], alpha = 0.3, fill = "#EEF2BF") + geom_rect(aes(xmin = xRange2[1], xmax = xRange2[2]), ymin = yRange[1], ymax = yRange[2], alpha = 0.3, fill = "#A3BAB6",) + geom_rect(aes(xmin = xRange3[1], xmax = xRange3[2]), ymin = yRange[1], ymax = yRange[2], alpha = 0.3, fill = "#BFA67E") + geom_line() 。我的实际数据框有超过3个我想要遮蔽的字符值。

0 个答案:

没有答案