gpt4 book ai didi

r - 如何在 ggplot2 中自动突出显示 x 轴的多个部分?

转载 作者:行者123 更新时间:2023-12-02 16:37:49 25 4
gpt4 key购买 nike

我有一个线图可以跟踪多个因素随时间的变化。我正在使用的数据的模拟版本是:

step   factor   count
1 a 10
1 b 0
1 c 5
2 a 5
2 b 10
2 c 0
... etc.

计数受外部事件的影响,对于每一步,我都知道该事件是否正在发生。这些信息可以在不同的数据框中,也可以在同一个数据框中,这并不重要,它看起来像这样:

step   event
1 FALSE
2 FALSE
...
10 TRUE
11 TRUE
...
30 FALSE
... etc.

我正在编写这个脚本来自动创建绘图,因为我将处理大量数据,虽然我知道我可以使用 geom_rect() 来硬编码突出显示的矩形,但这绝对不是我可以手动完成的事情不会浪费太多时间,尤其是考虑到事件可以在不同实例的不同步骤打开和关闭。

有什么方法可以从数据中动态提取 geom_rect() 的 x 限制,并根据数据集的需要创建尽可能多的矩形?还是这完全没有希望?

最佳答案

这可能有点 hacky,但我认为它给出了您正在寻找的结果。让我先创建一些大致对应于您的数据:

df <- data.frame(step = rep(1:100, 3), group = rep(letters[1:3], each = 100),
value = c(cumsum(c(50, runif(99, -1, 1))),
cumsum(c(50, runif(99, -1, 1))),
cumsum(c(50, runif(99, -1, 1)))))

df2 <- data.frame(step = 1:100, event = sample(c(TRUE, FALSE), 100, TRUE))

所以 df 的起始图看起来像这样:

ggplot(df, aes(step, value, colour = group)) + geom_line()

enter image description here

事件数据框如下所示:

head(df2)
#> step event
#> 1 1 FALSE
#> 2 2 FALSE
#> 3 3 FALSE
#> 4 4 TRUE
#> 5 5 FALSE
#> 6 6 TRUE

我们的想法是,您将半透明的红色 geom_area 添加到绘图中,使 FALSE 值远低于范围底部和 TRUE 值远远高于范围的顶部,然后只需设置 coord_cartersian 以便 y 限制接近您的主要数据的限制。只要您的事件为 TRUE,这就会给您红色垂直带:

ggplot(df, aes(step, value, colour = group)) + 
geom_line() +
geom_area(data = df2, aes(x = step, y = 1000 * event),
inherit.aes = FALSE, fill = "red", alpha = 0.2) +
coord_cartesian(ylim = c(40, 60)

enter image description here

关于r - 如何在 ggplot2 中自动突出显示 x 轴的多个部分?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62287086/

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