gpt4 book ai didi

r - 是否可以对不带单个 `geom_boxplot()` 的小平面进行 ggplot 分组的部分箱线图?

转载 作者:行者123 更新时间:2023-12-04 15:42:11 25 4
gpt4 key购买 nike

我需要在下面的图中添加一些部分箱线图:

library(tidyverse)

foo <- tibble(
time = 1:100,
group = sample(c("a", "b"), 100, replace = TRUE) %>% as.factor()
) %>%
group_by(group) %>%
mutate(value = rnorm(n()) + 10 * as.integer(group)) %>%
ungroup()

foo %>%
ggplot(aes(x = time, y = value, color = group)) +
geom_point() +
geom_smooth(se = FALSE)

enter image description here

我会在上面的图中添加一个 (2 x 4 = 8) 个箱线图(每组 4 个)的网格。每个箱线图应考虑连续选择 25(或 n)个点(在每个组中)。即,前两个箱线图代表 1 号和 25 号之间的点(下面一个箱线图表示 a 组,上面一个箱线图表示 b 组)。在它们旁边,还有另外两个箱线图,用于表示第 26 位和第 50 位之间的点,等等。如果它们不在一个完美的网格中(我认为这将更难获得且更丑陋),那就更好了:我更希望它们“遵循”相应的平滑线!

这一切都没有使用分面(因为我必须将它们插入已经分面的情节中:-))

我试过了

bar <- foo %>%
group_by(group) %>%
mutate(cut = 12.5 * (time %/% 25)) %>%
ungroup()

bar %>%
ggplot(aes(x = time, y = value, color = group)) +
geom_point() +
geom_smooth(se = FALSE) +
geom_boxplot(aes(x = cut))

但它不起作用。

enter image description here

我尝试使用 group 而不是 x 调用 geom_boxplot()

bar %>%
ggplot(aes(x = time, y = value, color = group)) +
geom_point() +
geom_smooth(se = FALSE) +
geom_boxplot(aes(group = cut))

但是它在不考虑组的情况下绘制了箱线图,甚至失去了颜色(并添加了包括 color = group 在内的冗余调用没有帮助)

enter image description here

最后还是决定粗略的试一下:

bar %>%   
ggplot(aes(x = time, y = value, color = group)) +
geom_point() +
geom_smooth(se = FALSE) +
geom_boxplot(data = filter(bar, group == "a"), aes(group = cut)) +
geom_boxplot(data = filter(bar, group == "b"), aes(group = cut))

而且它有效(甚至保持了主要 aes 的正确颜色)! enter image description here

有人知道是否可以通过调用 geom_boxplot() 获得它吗?

谢谢!

最佳答案

这很有趣!我之前没有尝试过将 geom_boxplot 与连续的 x 一起使用,也不知道它的行为方式。我认为正在发生的事情是设置 group 覆盖 geom_boxplot 中的 colour,因此它不尊重继承或重复的 colour 审美。我认为这个解决方法可以解决问题;我们将 groupcut 变量合并到 group_cut 中,它有 8 个不同的值(一个对应每个所需的箱线图)。现在我们可以映射 aes(group = group_cut) 并获得所需的输出。我认为这不是特别直观,可能值得在 Github 上提出它,因为通常我们希望美学能够很好地结合(例如,结合 colourlinetype 效果很好).

library(tidyverse)

bar <- tibble(
time = 1:100,
group = sample(c("a", "b"), 100, replace = TRUE) %>% as.factor()
) %>%
group_by(group) %>%
mutate(
value = rnorm(n()) + 10 * as.integer(group),
cut = 12.5 * ((time - 1) %/% 25), # modified this to prevent an extra boxplot
group_cut = str_c(group, cut)
) %>%
ungroup()

bar %>%
ggplot(aes(x = time, y = value, colour = group)) +
geom_point() +
geom_smooth(se = FALSE) +
geom_boxplot(aes(group = group_cut), position = "identity")
#> `geom_smooth()` using method = 'loess' and formula 'y ~ x'

reprex package 创建于 2019-08-13 (v0.3.0)

关于r - 是否可以对不带单个 `geom_boxplot()` 的小平面进行 ggplot 分组的部分箱线图?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57485779/

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