gpt4 book ai didi

r - 使用 purrr map 打印 ggplot

转载 作者:行者123 更新时间:2023-12-02 13:14:11 25 4
gpt4 key购买 nike

我想根据我的响应变量数值列创建ggplots

这是可重现的代码:

test = mpg %>% select_if(is.numeric) %>% 
dplyr::select(-year) %>% nest(-cyl) %>%
mutate(ggplots = map(data,~ggplot(data = .x) + geom_point(aes(x = cyl, y = .x))))

test
# A tibble: 4 x 3
cyl data ggplots
<int> <list<df[,3]>> <list>
1 4 [81 x 3] <gg>
2 6 [79 x 3] <gg>
3 8 [70 x 3] <gg>
4 5 [4 x 3] <gg>
Warning message:
All elements of `...` must be named.
Did you want `data = c(displ, cty, hwy)`?

收到错误:

test$ggplots[[1]]
Don't know how to automatically pick scale for object of type tbl_df/tbl/data.frame. Defaulting to continuous.
Error: Aesthetics must be either length 1 or the same as the data (81): x, y

怎么了?

最佳答案

当我们想要循环遍历一堆变量并根据另一个变量绘制每个变量时,一个选择是循环遍历变量名称。

我首先会在 y 上提取我想要的变量名称。我在管道末尾使用 set_names() 来用其自身命名向量,因为有时我需要它来进行稍后的组织。

vars = mpg %>%
select_if(is.numeric) %>%
select(-cyl, - year) %>%
names() %>%
set_names()

结果是一个字符串向量。

vars
# displ cty hwy
# "displ" "cty" "hwy"

现在我可以循环遍历这些变量名称,并针对固定的 x 变量 cyl 绘制图表。我将为此使用 purrr::map() 循环。由于我正在使用字符串,因此我需要在 ggplot() 中使用整洁的评估,使用 .data 代词完成(我相信这仅适用于最新的 0.4.0发布rlang)。我用 labs() 中的变量标记 y 轴,否则它在轴标签中具有 .data 代词。

plots = map(vars, ~ggplot(data = mpg) +
geom_point(aes(x = cyl, y = .data[[.x]]) ) +
labs(y = .x)
)

我演示了上面的方法in a blog post I wrote last year如果您有兴趣了解更多解释。

如果您不想像这样循环遍历字符串,另一种选择是将数据集 reshape 为长格式,然后使用嵌套方法。这个想法是创建一个长数据集,在 y 轴上获取所需的变量并将它们的值全部放在一列中。我使用 tidyr::pivot_longer() 来完成此操作。 y 变量的数值现在位于名为 value 的单列中。

然后为每个变量名称嵌套 cylvalue 列。完成后,您将拥有一个三行数据集,每个 y 变量一行,您可以在 mutate() 中循环数据集以创建绘图列正如您最初的尝试一样。

plots2 = mpg %>%
select_if(is.numeric) %>%
dplyr::select(-year) %>%
pivot_longer(cols = -cyl) %>%
nest(data = -name) %>%
mutate(ggplots = map(data,
~ggplot(data = .x) + geom_point(aes(x = cyl, y = value)))

关于r - 使用 purrr map 打印 ggplot,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58204452/

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