gpt4 book ai didi

r - 是否可以将 geom_ribbon 扩展到 xlimits?

转载 作者:行者123 更新时间:2023-12-04 11:20:53 28 4
gpt4 key购买 nike

我有以下代码(作为示例),我想对其进行调整,以使功能区扩展到整个 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)

我尝试设置 xgeom_ribbondates同样,但只有部分范围被填充。
我也试过这个:

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)

enter image description here

请注意,我使用了 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/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com