使用R中的'for'循环在数据框中创建多个图(每列一个图)

时间:2019-02-26 12:02:10

标签: r dataframe for-loop plot multiple-columns

我想使用R中的“ for”循环在数据框中绘制多个直方图(每列一个)。示例数据(df)如下所示。

enter image description here

> dput(head(df))
structure(list(Hockey = c(0.03, 0.032, 0.07, 0.033, 0.076, 0.064
), Cricket = c(0.003, 0.004, 0.009, 0.004, 0.009, 0.008), Tennis = c(0.004, 
0.006, 0.003, 0.002, 0.002, 0.011), Badminton = c(27.1, 28.7, 
28.7, 29.4, 31, 33.6), Groups = structure(c(1L, 1L, 1L, 1L, 1L, 
1L), .Label = c("TeamA", "TeamB", "TeamC"), class = "factor")), row.names = c("Participant1", 
"Participant2", "Participant3", "Participant4", "Participant5", 
"Participant6"), class = "data.frame")

我已经完成了在线搜索,并设法获得了此代码。对于每一列,我想基于“组”制作多个直方图。当我没有'for'循环并且只有一栏时,这对我有用。但是,当我尝试对一个“单个pdf”中的所有列使用“ for”循环进行所有操作时,则会生成pdf文件,而没有任何错误。但是它不会产生任何情节。任何人都可以帮助我了解代码中可能缺少的内容吗?我只想使它自动化,因为我不止要为这四个变量制作这四个变量。

library(purrr)
library(ggplot2)
library(doBy)
setwd("C:\\Path\\")

df <- read.table("Histograms_Example.txt", header=T)
pdf(file=paste0("one.pdf"))
par(mfrow = c(1, 1))

loop.vector <- names(df)[1:4]
for (i in loop.vector) {
x <- df[,i]
mu <- summaryBy(x ~ Groups, data = df, 
          FUN = list(median), na.rm = TRUE)
ggplot(df, aes(x=x, color=Groups, fill=Groups)) +
geom_histogram(aes(y=..density..), position="identity", alpha=0.5)+ 
geom_density(alpha=0.6)+
geom_vline(data=mu, aes(xintercept=x.median, color=Groups),
           linetype="dashed")+
scale_color_grey()+
scale_fill_grey() +
labs(title="Weight histogram plot",x=paste("",x), y = "Density")+
theme_classic()
}
dev.off()

谢谢。

1 个答案:

答案 0 :(得分:1)

您需要在for循环中显式打印ggplot对象:

  1. 将图分配给对象:p = ggplot(...)

  2. 打印对象:print(p)