赞
踩
首先,我们准备好数据
循环画图的思路和之前一样,需要先构建一个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 = ""))))
}
}
这里对循环过程做简单地讲解:对于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))
等待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
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))
# 循环绘图
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))
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。