Вот несколько подходов для вас. Я предполагаю, что есть дубликат, но если вы только начинаете, не всегда легко применить эти ответы на свои данные.
library(reshape2)
library(ggplot2)
###create some data
set.seed(100)
n = 500
dat <- data.frame(sample = sample(LETTERS[1:10],n,T),
V1 = sample(50,n,T),
V2 = sample(50,n,T),
V3 = sample(50,n,T),
Group1 = paste0("G",sample(3,n,T)),
Group2 = paste0("G",sample(5,n,T)))
подход 1: растопить и фаска
dat_m <- melt(dat,measure.vars = c("V1","V2","V3"))
p1 <- ggplot(dat_m, aes(x = Group1,y = value,fill = Group2))+
geom_boxplot() + facet_wrap(~variable)
p1
Как вы можете видеть, это не представляется возможным, если у вас есть слишком много переменных группирования.
подход 2: разные графики/изображения для переменной, все еще использующие длинные данные. Я разделил длинные данные по переменной и создал график для каждого фрагмента. Текущий код отображается на консоли; файл с сохранением кода закомментирован.
lapply(split(dat_m, dat_m$variable), function(chunk){
myfilename <- sprintf("plot_%s.png", unique(chunk$variable))
p <- ggplot(chunk, aes(x = Group1,y = value,fill = Group2)) +
geom_boxplot() + labs(title = myfilename)
p
# #png(filename = myfilename)
# print(p)
# dev.off()
})
И третий подход заключается в использовании строк столбцов вы заинтересованы в:
#vector of columns you want to plot
mycols <- c("V1","V2","V3")
#plotting for each column. Not that I've put the 'fixed' variable
#inside aes in the main call to ggplot, and the 'varying' variable
#inside aes_string in the call to boxplot
lapply(mycols, function(cc){
myfilename <- sprintf("plot_%s.png",cc)
p <- ggplot(dat, aes(x = Group1,fill = Group2)) +
geom_boxplot(aes_string(y = cc)) + labs(title = myfilename)
p
# #png(filename = myfilename)
# print(p)
# dev.off()
})
Что именно вы боретесь с? Что вы пробовали? Существует несколько подходов, частично зависящих от ваших данных. Вы можете преобразовать свои данные в длинный формат и использовать грани или подход split/lapply. Или зациклируйте нужные столбцы для создания графика, например, с помощью aes_string. – Heroka
Я могу представить, как можно использовать цикл for для вызова отдельных столбцов фрейма данных, содержащих переменные (V1, V2 и т. Д.), Но я не знаю, как указать переменные группировки (Group1, Group2) и сохранить эти от изменения в цикле. Я действительно не знаком с написанием циклов и синтаксисом. – lmrta
Я думаю, что фасетный сюжет может быть тем, что ищет OP. тают эти вары в один вар, а затем и фасет. Чтобы заняться в данный момент, чтобы закодировать его, но не составит труда. Должен посмотреть на reshape2, чтобы сделать расплав. –