使用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让我的朋友惊讶:)