我想使用R中的“ for”循环在数据框中绘制多个直方图(每列一个)。示例数据(df)如下所示。
> 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()
谢谢。
答案 0 :(得分:1)
您需要在for循环中显式打印ggplot对象:
将图分配给对象:p = ggplot(...)
打印对象:print(p)