当前位置:   article > 正文

R语言ggplot2 | 双轴循环绘图及拼图_r语言如何使用for循环作图

r语言如何使用for循环作图


   先前与大家分享过一篇循环绘图的代码,但是不涉及循环拼图。本文与大家分享x与y都需要循环的绘图,及循环拼图。

构建数据

首先,我们准备好数据
在这里插入图片描述

循环绘图

循环画图的思路和之前一样,需要先构建一个list,然后将每张需要画的图绘制好装到list中。比如,在这需要循环的是Y1-Y3与X1-X2的6张图。其实相对与之前的还稍微复杂了一些,x和y都进行了改变,所有算是之前的升级,那我们就要对x和y进行嵌套循环

library(ggplot2)
p <- list()
for (i in colnames(mydf)[1:3]) {
  for (j in colnames(mydf)[4:5]) {
    p <- c(p,
           list(ggplot(mydf) +
                  geom_boxplot(aes_string(x = j, y = i)) +
                  labs(title = paste(i, "-", j, sep = ""))))
  }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

这里对循环过程做简单地讲解:对于i循环,colnames(mydf)[1:3], 这里表示的是我mydf数据集中第1到3列的列名,那就是Y1-Y3;对于j同理就是X1-X2的循环。我们嵌套后的R代码运行逻辑就是,当运行Y1时,会将Y1与X1-X2的2张拟合图绘制,以此类推就是运行3*2=6张图。

重点,p<-c(p,这部分如何理解?就是当我运行i=1 , j=1时,就会有第1个p,然后用c构建这个向量进行叠加打包,最后装到这个p list中。那最后的p就有6个:
在这里插入图片描述
再比如我们直接想提取某张图,那应该是list结构的提取方式:p[[1]],结果如下,
在这里插入图片描述
循环绘制好图片,自然要导出了。和之前一样可以直接用ggsave或者graph2ppt的方式导出。这里可以参考该推文,ggplot2循环绘图

循环拼图

我们也可以先通过循环拼图的方式,将图片先在R语言里调整好再导出。这里通过巧妙的运用matrix,然后利用Rmisc包中的multiplot函数进行拼图。

Rmisc::multiplot(plotlist = p, layout = matrix(1:6, nrow = 2))
  • 1

等待10秒就有结果了!在这里插入图片描述
这里的函数介绍可以参考help(muliplot), 里面layout的形式用的是matrix函数,如果想按行循序排列,添加byrow = T即可。在这里插入图片描述
如果想通过其他拼图方式也可以查看这篇推文,R语言-地表最全R拼图教程,告别AI和PS。想绘制其他图,可以把几何对象修改了成其他的就可以。这里以柱状图为例子,我们先计算每个X1-X2中对应Y1-Y3的均值:

library(tidyverse)
mydf_mean <- mydf %>% group_by(X1, X2) %>%
  summarise(mean_Y1 = mean(Y1),
            mean_Y2 = mean(Y2),
            mean_Y3 = mean(Y3))
mydf_mean
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

在这里插入图片描述

library(ggplot2)
p1 <- list()
for (i in colnames(mydf_mean)[1:2]) {
  for (j in colnames(mydf_mean)[3:5]) {
    p1 <- c(p1,
           list(ggplot(mydf_mean) +
                  geom_bar(aes_string(x = i, y = j), stat = "identity") +
                  labs(title = paste(i, "-", j, sep = ""))))
  }
}

Rmisc::multiplot(plotlist = p1, layout = matrix(1:6, nrow = 2))
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

在这里插入图片描述

附上代码

# 循环绘图
library(ggplot2)
p <- list()
for (i in colnames(mydf)[1:3]) {
  for (j in colnames(mydf)[4:5]) {
    p <- c(p, 
           list(ggplot(mydf) +
                  geom_boxplot(aes_string(x = j, y = i)) +
                  labs(title = paste(i, "-", j, sep = ""))))
  }
}

# 提取某张图
p[[1]]

# 循环拼图
Rmisc::multiplot(plotlist = p, layout = matrix(1:6, nrow = 2))

# 按行循环拼图
Rmisc::multiplot(plotlist = p, layout = matrix(1:6, nrow = 2, byrow = T))

# 计算均值
library(tidyverse)
mydf_mean <- mydf %>% group_by(X1, X2) %>% 
  summarise(mean_Y1 = mean(Y1),
            mean_Y2 = mean(Y2),
            mean_Y3 = mean(Y3))
mydf_mean

# 循环绘图
library(ggplot2)
p1 <- list()
for (i in colnames(mydf_mean)[1:2]) {
  for (j in colnames(mydf_mean)[3:5]) {
    p1 <- c(p1, 
           list(ggplot(mydf_mean) +
                  geom_bar(aes_string(x = i, y = j), stat = "identity") +
                  labs(title = paste(i, "-", j, sep = ""))))
  }
}

Rmisc::multiplot(plotlist = p1, layout = matrix(1:6, nrow = 2))

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/不正经/article/detail/132169
推荐阅读
相关标签
  

闽ICP备14008679号