Создайте несколько графиков (один график для каждого столбца) во фрейме данных, используя цикл for - PullRequest
0 голосов
/ 26 февраля 2019

Я хочу сделать несколько графиков гистограммы (по одному для каждого столбца) в кадре данных, используя цикл 'for' в R. Пример данных (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 и для одного столбца.Однако, когда я пытаюсь сделать это, используя цикл for для всех столбцов в «одном PDF-файле», тогда файл PDF генерируется без каких-либо ошибок.Но это не дает никаких сюжетов.Может ли кто-нибудь помочь мне узнать, чего мне не хватает в коде?Я просто хочу сделать это автоматизированным, потому что у меня гораздо больше, чем эти 4 переменные, для которых создаются такие графики.

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 голосов
/ 26 февраля 2019

Вам необходимо явно напечатать объект ggplot в цикле for:

  1. Назначить график для объекта: p = ggplot(...)

  2. Распечатать объект: print(p)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...