使用purrr映射打印ggplot

使用purrr映射打印ggplot,r,ggplot2,purrr,R,Ggplot2,Purrr,我想针对我的响应变量为数值列创建ggplots 以下是可复制代码: test=mpg%%>%如果(是数值)%%>%,请选择 dplyr::选择(-year)%%>%nest(-cyl)%%>% 变异(ggplot=map(数据,~ggplot(数据=.x)+几何点(aes(x=cyl,y=.x))) 测试 #一个tibble:4x3 共青团数据图 14[81 x 3] 26[79 x 3] 38[70 x 3] 45[4 x 3] 警告信息: “…”的所有元素都必须命名。 您想要'data=c(

我想针对我的
响应变量
数值列
创建
ggplots

以下是可复制代码:

test=mpg%%>%如果(是数值)%%>%,请选择
dplyr::选择(-year)%%>%nest(-cyl)%%>%
变异(ggplot=map(数据,~ggplot(数据=.x)+几何点(aes(x=cyl,y=.x)))
测试
#一个tibble:4x3
共青团数据图
14[81 x 3]
26[79 x 3]
38[70 x 3]
45[4 x 3]
警告信息:
“…”的所有元素都必须命名。
您想要'data=c(显示,cty,hwy)'吗?
获取错误:

test$ggplots[[1]]
不知道如何为tbl_df/tbl/data.frame类型的对象自动拾取比例。默认为连续。
错误:长度必须为1或与数据(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
代词(我相信这只在rlang的最新0.4.0版本中起作用)。我用
labs()
中的变量标记y轴,否则它在轴标签中有
.data
代词

plots = map(vars, ~ggplot(data = mpg) +
                 geom_point(aes(x = cyl, y = .data[[.x]]) ) +
                 labs(y = .x)
)
如果您对更多解释感兴趣,我将演示上述方法

如果您不想像这样循环遍历字符串,另一个选项是将数据集重塑为长格式,然后使用嵌套方法。其思想是制作一个长数据集,在y轴上获取所需的变量,并将它们的值全部放在一列中。我使用
tidyr::pivot\u longer()
来实现这一点。
y
变量的数值现在位于一列中,名为
value

然后为每个变量名嵌套
cyl
value
列。完成后,您将拥有一个三行数据集,每个
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)))

您有
data=.x
aes(y=.x)
。其中一个
.x
需要是data.frame/tible,另一个需要是列名。你想精确地绘制什么?试图绘制
cyl
与所有其他
numeric col
的对比图只是为了澄清,你不想按组绘制任何图,而是寻找
cyl
与其他变量的对比图?这是什么魔法:D让我的朋友惊讶:)