Boxplot集成三个信息级别

时间:2018-09-09 10:32:22

标签: r

我有一个问题,如何使用箱线图绘制数据并集成3种不同的信息类型。特别是,我有一个看起来像这样的数据框:

  Exp_number  Condition  Cell_Type     Gene1        Gene2       Gene3     

       1           2       Cancer       0.33         0.2         1.2
       1           2       Cancer       0.12         1.12        2.5
       1           4       Fibro        3.4          2.2         0.8
       2           4       Cancer       0.12         0.4         0.11
       2           4       Normal       0.001        0.01        0.001
       3           1       Cancer       0.22         1.2         3.2  
       2           1       Normal       0.001        0.00003     0.00045 

总共20.000列和110行(行是示例)。

我想绘制一个箱形图,其中首先按条件对数据进行分组。然后,在每种情况下,我都想突出显示(例如使用不同的颜色)exp_number,最后我不知道如何显示,但我想突出显示单元格类型。目的是强调条件之间在基因表达方面的exp_number之间的差异,以及在Exp_numbers之间的细胞类型的差异。 是否有一种简单的方法将所有这些信息整合到一个图中?

提前谢谢

2 个答案:

答案 0 :(得分:1)

这种方法怎么样

dat <- data.frame(Exp_number=factor(sample(1:3,100,replace = T)), 
                  condition=factor(sample(1:4,100,T)), 
                  Cell_type=factor(sample(c("Normal", "Cancer", "Fibro"), 100, replace=T)), 
                  Gene1=abs(rnorm(100, 5, 1)), 
                  Gene2=abs(rnorm(100, 6, 0.5)), 
                  Gene3=abs(rnorm(100, 4, 3)))

library(reshape2)
dat2 <- melt(dat, id=c("Exp_number", "condition", "Cell_type"))

ggplot(dat2, aes(x=Exp_number, y=value, col=Cell_type)) + 
    geom_boxplot() + 
    facet_grid(~ condition) + 
    theme_bw() + 
    ylab("Expression")

得出以下结果

enter image description here

答案 1 :(得分:0)

类似于@storaged's answer,但利用facet_grid的两个维度来表示您的两个变量:

ggplot(dat2, aes(x=Cell_type, y=Expression)) + 
  geom_boxplot() + 
  facet_grid(Exp_number ~ condition) + 
  theme_bw() 

enter image description here

数据:

library(reshape2)
dat <- data.frame(Exp_number=factor(sample(1:3,100,replace = T)), 
                  condition=factor(sample(1:4,100,T)), 
                  Cell_type=factor(sample(c("Normal", "Cancer", "Fibro"), 100, replace=T)), 
                  Gene1=abs(rnorm(100, 5, 1)), 
                  Gene2=abs(rnorm(100, 6, 0.5)), 
                  Gene3=abs(rnorm(100, 4, 3)))

dat2 <- melt(dat, id=c("Exp_number", "condition", "Cell_type"), value.name = 'Expression')
dat2$Exp_number <- paste('Exp.', dat2$Exp_number)
dat2$condition <- paste('Condition', dat2$condition)