Блок-диаграмма джиттера по уровням факторов плюс диаграмма комбинированных уровней - PullRequest
2 голосов
/ 09 июля 2020

У меня три реплики экспериментального образца (F) и три реплики контрольных образцов (C). Каждый экспериментальный образец имеет 100 точек данных, тогда как каждый контроль имеет 70 точек данных. Для экспериментальных точек данных есть подкатегории, такие как 4E, 5E, 7E, 8E, а для контроля есть только одна категория CE.

Вот код для генерации некоторых эмулированных данных:

library(ggplot2)
set.seed(12345)
evals <- c( rep("4E",20), rep("5E",20), rep("7E",40), rep("8E",20))
subE <- c(sample(evals),sample(evals),sample(evals),rep("CE",70),rep("CE",70),rep("CE",70))
pwvr <- c(rnorm(100),rnorm(100),rnorm(100),rnorm(70,1.0),rnorm(70,1.1),rnorm(70,1.2))
expT <- c(rep("F",100*3),rep("C",70*3))
repX <- c(rep(1,100),rep(2,100),rep(3,100),rep(1,70),rep(2,70),rep(3,70))
myData.df <- data.frame(subE=as.factor(subE), pwvr = pwvr, expT= as.factor(expT), repX= as.factor(repX))
dim(myData.df)

Что я хочу сделать, так это нарисовать прямоугольные диаграммы и диаграммы джиттера для уровней факторов 4E, 5E, 7E, 8E вместе с прямоугольной диаграммой объединенных значений этих четырех уровней. Я не знаю, как это сделать. Нужно ли мне создать другой уровень, объединяющий все соответствующие значения?

Во-вторых, может ли кто-нибудь сказать, как реорганизовать внешний вид заказов по оси X, например, как построить следующий порядок 8E, 7E, 5E, 4E et c.

Следующий код генерирует график для отдельных уровней, но мне также нужно иметь поле / джиттер для комбинированных уровней.

myGreen <- "forestgreen"
myBlue <- "dodgerblue2"
allboxCol <- c(rep(myGreen,1),rep(myBlue,1))

pw.boxplot <- ggplot(myData.df, aes(x=subE,y=pwvr, fill= expT)) +
                geom_jitter(position=position_jitter(width=.2, height=0),alpha=0.15, aes(col= expT)) + scale_color_manual(values=allboxCol) +
                geom_boxplot(outlier.shape = NA, fatten = 0.01, lwd=1.0,alpha=0.5,width=0.6) + 
                theme_bw() + theme(panel.border = element_blank(), panel.grid.major = element_blank(),
                panel.grid.minor = element_blank(), axis.line = element_line(colour = "black")) 
pw.boxplot + scale_fill_manual(values=allboxCol) + facet_grid( .~ expT + repX , scales="free", space = "free" )   

Коробчатая диаграмма уровней факторов

Ответы [ 2 ]

4 голосов
/ 09 июля 2020

вы имеете в виду?

myGreen <- "forestgreen"
myBlue <- "dodgerblue2"
allboxCol <- c(rep(myGreen,1),rep(myBlue,1))
allboxCol <- c(alpha(allboxCol, 0.2),allboxCol[2])

library(tidyverse)
myData.df %>% 
  as_tibble() %>% 
  mutate(subE = paste0("total_", expT, repX)) %>% 
  filter(expT  != "C") %>% 
  bind_rows(myData.df) %>% 
  mutate(fill = ifelse(grepl("total", subE), paste0("total_",expT), expT)) %>% 
  ggplot(aes(x=subE,y=pwvr, fill= fill)) +
     geom_jitter(position=position_jitter(width=.2, height=0),alpha=0.15, aes(col= fill), show.legend = F) + 
     geom_boxplot(outlier.shape = NA, fatten = 0.01, lwd=1.0,width=0.6, show.legend = F) + 
     scale_fill_manual(values=allboxCol) +
     scale_color_manual(values=allboxCol) +
     theme_bw() + 
     theme(panel.border = element_blank(), panel.grid.major = element_blank(),
                     panel.grid.minor = element_blank(), axis.line = element_line(colour = "black")) +
  facet_grid( .~ expT + repX , scales="free", space = "free" ) 

введите описание изображения здесь

1 голос
/ 09 июля 2020

Это действительно простое решение - просто повторить данные, но назначив новый уровень, я назвал его all. Вы можете явно указать порядок уровней:

library(ggplot2)
library(dplyr)
set.seed(12345)
evals <- c( rep("4E",20), rep("5E",20), rep("7E",40), rep("8E",20))
subE <- c(sample(evals),sample(evals),sample(evals),rep("CE",70),rep("CE",70),rep("CE",70))
pwvr <- c(rnorm(100),rnorm(100),rnorm(100),rnorm(70,1.0),rnorm(70,1.1),rnorm(70,1.2))
expT <- c(rep("F",100*3),rep("C",70*3))
repX <- c(rep(1,100),rep(2,100),rep(3,100),rep(1,70),rep(2,70),rep(3,70))
myData.df <- data.frame(subE=subE, pwvr = pwvr, expT= expT, repX= repX,
                        stringsAsFactors = FALSE)

add_data <- myData.df %>% 
  filter(subE != "CE") %>% 
  mutate(subE = "all")

myData.df <- bind_rows(myData.df, add_data)
myData.df <- myData.df %>% 
  mutate(subE = as.factor(subE),
         subE = factor(subE, levels = levels(subE)[c(4, 3, 2, 1, 5, 6)]))


myGreen <- "forestgreen"
myBlue <- "dodgerblue2"
allboxCol <- c(rep(myGreen,1),rep(myBlue,1))

pw.boxplot <- ggplot(myData.df, aes(x=subE,y=pwvr, fill= expT)) +
  geom_jitter(position=position_jitter(width=.2, height=0),alpha=0.15, aes(col= expT)) + scale_color_manual(values=allboxCol) +
  geom_boxplot(outlier.shape = NA, fatten = 0.01, lwd=1.0,alpha=0.5,width=0.6) + 
  theme_bw() + theme(panel.border = element_blank(), panel.grid.major = element_blank(),
                     panel.grid.minor = element_blank(), axis.line = element_line(colour = "black")) 
pw.boxplot + scale_fill_manual(values=allboxCol) + facet_grid( .~ expT + repX , scales="free", space = "free" )   

введите описание изображения здесь

...