我有以下代码(作为示例),我想对其进行调整,以使功能区扩展到整个 xrange,如 geom_hline()
做。功能区指示哪些值在可接受的范围内。在我的实际应用程序中,有时没有上限或下限,因此 hline 本身不足以确定值是否在范围内。
library(ggplot2)
set.seed(2016-12-19)
dates <- seq(as.Date('2016-01-01'), as.Date('2016-12-31'), by = 1)
values <- rexp(length(dates), 1)
groups <- rpois(length(dates), 5)
temp <- data.frame(
date = dates,
value = values,
group = groups,
value.min = 0,
value.max = 2
)
ggplot(temp, aes(date, value)) +
geom_ribbon(aes(ymin = value.min, ymax = value.max), fill = '#00cc33', alpha = 0.6) +
geom_hline(aes(yintercept = value.min)) +
geom_hline(aes(yintercept = value.max)) +
geom_point() +
facet_wrap(~group)
我尝试设置
x
在 geom_ribbon
至 dates
同样,但只有部分范围被填充。我也试过这个:
geom_ribbon(aes(ymin = -Inf, ymax = 2, x = dates), data = data.frame(), fill = '#00cc33', alpha = 0.6)
但随后数据似乎被整个情节覆盖,我收到错误
Error in eval(expr, envir, enclos) : object 'value' not found
.即使它可以工作,随着 xlimits 的扩展,范围实际上仍然太窄。
最佳答案
这是一种方法:
ggplot(temp, aes(as.numeric(date), value)) +
geom_rect(aes(xmin=-Inf, xmax=Inf, ymin = value.min, ymax = value.max), temp[!duplicated(temp$group),], fill = '#00cc33', alpha = 0.6) +
geom_hline(aes(yintercept = value.min)) +
geom_hline(aes(yintercept = value.max)) +
geom_point() +
scale_x_continuous(labels = function(x) format(as.Date(x, origin = "1970-01-01"), "%b %y")) +
facet_wrap(~group)
请注意,我使用了
as.numeric(date)
, 因为否则 Inf
和 -Inf
屈服Error: Invalid input: date_trans works with objects of class Date only
为了获取数值的日期标签,我调整了
scale_x_continuous
相应地贴上标签。 (尽管它们在这里并不准确。您可能希望通过使用确切的日期而不是月/年来调整它,或者使用 breaks
参数和例如 seq.Date
设置手动中断。)另请注意,我使用了
temp[!duplicated(temp$group),]
以避免过度绘制,从而保持所需的 alpha 透明度。
关于r - 是否可以将 geom_ribbon 扩展到 xlimits?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41220434/