按因子水平的抖动箱线图加上组合级的箱线图

时间:2020-07-09 06:19:38

标签: r ggplot2 boxplot

我有三份实验样品(F)和三份对照样品(C)。每个实验样品具有100个数据点,而每个对照具有70个数据点。对于实验数据点,有4E,5E,7E,8E等子类,而对于控制,只有一个CE类。

下面是生成一些模拟数据的代码:

1
98
9604
884736
92236816
93131255

我想做的是绘制因子水平4E,5E,7E,8E的Box和Jitter图以及这四个水平的组合值的箱图。我不知道该怎么做。我需要创建另一个关卡汇总所有相应值吗?

第二,任何人都可以说出如何沿X轴重新组织订单的外观,例如如何绘制以下订单8E,7E,5E,4E等。

下面的代码生成各个级别的图,但是我还需要具有组合级别的框/抖动。

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)

Boxplot of Factor Levels

2 个答案:

答案 0 :(得分:4)

你是什么意思?

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" ) 

enter image description here

答案 1 :(得分:1)

仅重复数据但分配一个新级别确实是一个简单的解决方案,我称之为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" )   

enter image description here