楼主: 千车麦穗
3219 5

[学习分享] 利用assign实现ggplot的批量做图 [推广有奖]

  • 5关注
  • 0粉丝

已卖:1份资源

博士生

0%

还不是VIP/贵宾

-

威望
0
论坛币
89 个
通用积分
6.7270
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
1864 点
帖子
84
精华
0
在线时间
292 小时
注册时间
2019-4-22
最后登录
2025-10-22

楼主
千车麦穗 发表于 2019-12-10 10:25:10 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币
各位老师好,
     我想把很多个变量用图像展现出来,然后放到一个画布里,示例代码如下:
  1. library(ggplot2)
  2. head(mtcars)
  3. for(i in 3:7){
  4.   assign(paste0("p", i),ggplot(data = mtcars, aes(x = mpg, y = mtcars[,i]))+geom_point()+
  5.    ylab(rownames(mtcars)[i]))
  6. }

  7. library(Rmisc) #图片组合到同一张画布中
  8. multiplot(p3,p4,p5,p6,p7,cols=3)
  9. p3
  10. p4
  11. p5
  12. p6
  13. p7
复制代码
但发现生成的图片都是一样的!没想明白哪里出错了,希望各位老师指教,谢谢
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

关键词:assign gplot sign plot GPL

沙发
skyfx 发表于 2019-12-10 12:26:32
用ggplot自带的facit不可以吗?为什么要自己写?

藤椅
megapanda 发表于 2019-12-10 14:02:16
将for循环中的内容改为
  1. for(i in 3:7){
  2.   assign(paste0("p", i),ggplot(data = mtcars, aes_string(x = "mpg", y = mtcars[,i]))+geom_point()+
  3.    ylab(rownames(mtcars)[i]))
  4. }
复制代码


可以看看aes和aes_string的区别
已有 1 人评分论坛币 收起 理由
cheetahfly + 10 热心帮助其他会员

总评分: 论坛币 + 10   查看全部评分

板凳
千车麦穗 发表于 2019-12-10 20:49:14
megapanda 发表于 2019-12-10 14:02
将for循环中的内容改为
非常感谢…
我查到,aes()需要填入变量名,但要批量出图的话,难免要用到字符向量的循环,aes_string函数可以将字符变量映射为ggplot所需的输入参数.

报纸
zhou1_20 发表于 2019-12-12 09:41:11
提供两种不用for循环的方法,希望对你有帮助
  1. #包

  2. library(ggloop)
  3. library(ggplot2)
  4. library(magrittr)
  5. library(purrr)

  6. #方法一,分配变量,然后绘图

  7. zeallot::`%<-%`(x = c(p3, p4, p5, p6, p7),
  8.       value =
  9.         ggloop(data = mtcars,
  10.                 mappings = aes_loop(
  11.                    x = mpg,
  12.                    y = 3:7))%>%
  13.         map(function(x) x+geom_point())
  14. )

  15. cowplot::plot_grid(p3, p4, p5, p6, p7, ncol = 3)

  16. #方法二 直接绘图,不分配变量
  17. cowplot::plot_grid(
  18.   plotlist=ggloop(data = mtcars,
  19.                   mappings = aes_loop(
  20.                     x = mpg,
  21.                     y = 3:7))%>%
  22.     map(function(x) x+geom_point())
  23.   ,ncol = 3)
复制代码

地板
千车麦穗 发表于 2019-12-22 23:44:12
zhou1_20 发表于 2019-12-12 09:41
提供两种不用for循环的方法,希望对你有帮助
恩恩,谢谢老师!

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加好友,备注cda
拉您进交流群
GMT+8, 2026-1-10 20:44