使用ggplot2在R中分组的箱图上的分组散点图 您所在的位置:网站首页 ggplot2画箱线图数据要求 使用ggplot2在R中分组的箱图上的分组散点图

使用ggplot2在R中分组的箱图上的分组散点图

2024-03-12 02:28| 来源: 网络整理| 查看: 265

要显示框图,shape美学需要在geom_point内部,而不是在对ggplot的主要调用中。这样做的原因是,当shape美学在主geom_boxplot调用中时,它将应用于所有geom,包括geom。但是,应用shape=Clone美学会导致geom_boxplot为每个级别的Clone创建单独的框图。由于variable和Clone的每种组合只有一行数据,因此不会生成箱图。

对我来说,shape美学影响geom_boxplot似乎是违反直觉的,但也许有我不知道的原因。在任何情况下,将shape美学迁移到geom_point中都可以通过将shape美学仅应用于geom_point来解决问题。

然后,为了获得与正确的框图一起出现的点,我们需要通过Gene执行group。我还添加了theme_classic,以便更容易地查看绘图(尽管它仍然非常繁忙):

ggplot(Tdata, aes(x=variable, y=value, fill=Gene)) + stat_boxplot(geom ='errorbar', width=0.25, size=0.7, coef=4, position=position_dodge(0.85)) + geom_boxplot(coef=1, outlier.shape=NA, lwd=0.3, alpha=1, colour=ln_clr, position=position_dodge(0.85)) + geom_point(position=position_jitterdodge(dodge.width=0.85), size=1.8, alpha=0.7, aes(shape=Clone, group=Gene)) + scale_fill_manual(values=blue_cols) + labs(y="Fold Change") + expand_limits(y=c(0.01,10^5)) + scale_y_log10(expand=c(0, 0), breaks=10^(-2:5), labels=trans_format("log10", math_format(10^.x))) + theme_classic()

我认为如果对Gene使用faceting,对variable使用x轴,那么绘图会更容易理解。将时间放在x轴上似乎更直观,而使用刻面可以释放点的颜色美学。有了六个不同的克隆,它仍然很难(至少对我来说)区分点标记,但对我来说,这看起来比前一个版本更清晰。

library(dplyr) ggplot(Tdata %>% mutate(Gene=gsub("Gene","Gene ", Gene)), aes(x=gsub("Day","",variable), y=value)) + stat_boxplot(geom='errorbar', width=0.25, size=0.7, coef=4) + geom_boxplot(coef=1, outlier.shape=NA, lwd=0.3, alpha=1, colour=ln_clr, width=0.5) + geom_point(aes(fill=Clone), position=position_jitter(0.2), size=1.5, alpha=0.7, shape=21) + theme_classic() + facet_grid(. ~ Gene) + labs(y = "Fold Change", x="Day") + expand_limits(y=c(0.01,10^5)) + scale_y_log10(expand=c(0, 0), breaks=10^(-2:5), labels=trans_format("log10", math_format(10^.x)))

如果你真的需要保留这些点,也许最好是通过一些手动的闪避来分离框图和点:

set.seed(10) ggplot(Tdata %>% mutate(Day=as.numeric(substr(variable,4,5)), Gene = gsub("Gene","Gene ", Gene)), aes(x=Day - 2, y=value, group=Day)) + stat_boxplot(geom ='errorbar', width=0.5, size=0.5, coef=4) + geom_boxplot(coef=1, outlier.shape=NA, lwd=0.3, alpha=1, width=4) + geom_point(aes(x=Day + 2, fill=Clone), size=1.5, alpha=0.7, shape=21, position=position_jitter(width=1, height=0)) + theme_classic() + facet_grid(. ~ Gene) + labs(y="Fold Change", x="Day") + expand_limits(y=c(0.01,10^5)) + scale_y_log10(expand=c(0, 0), breaks=10^(-2:5), labels=trans_format("log10", math_format(10^.x)))

还有一件事:为了便于将来参考,您可以简化您的数据创建代码:

Gene = rep(paste0("Gene",LETTERS[1:5]), each=24) Clone = rep(paste0("D",1:6), 20) variable = rep(rep(paste0("Day", seq(10,40,10)), each=6), 5) value = rnorm(24*5, mean=rep(c(0.5,10,1000,25000,8000), each=24), sd=rep(c(0.5,8,900,9000,3000), each=24)) Tdata = data.frame(Gene, Clone, variable, value)


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有