gpt4 book ai didi

r - 如何将 tibble 元素映射到 ggplot2 美学?

转载 作者:行者123 更新时间:2023-12-01 12:19:07 25 4
gpt4 key购买 nike

我有以下数据集

map(.x = list(small = 3, medium = 10, large  = 100) , 
.f = ~ sample(rnorm(1000), .x, replace = T)) %>%
tibble(sample = ., mean = map_dbl(., mean))

# A tibble: 3 x 2
sample mean
<list> <dbl>
1 <dbl [3]> 0.61473548
2 <dbl [10]> 0.17278357
3 <dbl [100]> 0.04156308

我正在尝试在 ggplot2 中为 sample 列中的每条记录在功能上创建 1 个直方图。我想在同一个网格中显示这些图,因此我想我可以以某种方式使用 facet_wrap() 但我不确定如何将美学映射到列表。

这是我目前尝试过的:

map(.x = list(small = 3, medium = 10, large  = 100) , 
.f = ~ sample(rnorm(1000), .x, replace = T)) %>%
tibble(sample = ., mean = map_dbl(., mean)) %>%
ggplot2::ggplot(data = .) + geom_histogram(mapping = aes(sample)) + facet_wrap(~ sample)

我期望的输出是 3 个直方图,分别具有 3、10 和 100 个观察值。

我想知道是否有一个可能的解决方案涉及将 sample 分成两列:一列包含所有值,另一列表示每个值所属的分布大小。这可能更符合 ggplot2 逻辑,但我不确定如何相应地扩展标题。

ps:我不知道怎么表达这个问题,欢迎大家提出建议

最佳答案

我认为你需要tidyr::unnest:

library(dplyr)
library(tidyr)
library(ggplot2)

## generate data
set.seed(123)
dtf <- map(.x = list(small = 3, medium = 10, large = 100),
.f = ~ sample(rnorm(1000), .x, replace = T)) %>%
tibble(sample = ., mean = map_dbl(., mean))

## plot
dtf %>%
mutate(group = names(sample)) %>% # or: group = lengths(sample)
unnest(sample) %>%
ggplot(data = .) +
geom_histogram(mapping = aes(sample)) +
facet_wrap(~ group)

enter image description here

关于r - 如何将 tibble 元素映射到 ggplot2 美学?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45827198/

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