最近在搜集好看的图的时候,看到了一幅下面这样的图:
图来自文献:《Benzo[a]pyrene stress impacts adaptive strategies and ecological functions of earthworm intestinal viromes》。
简单搜索了一下,这种图因为上部分的密度曲线像一朵云,下面的三点像云层下面下着的雨,形象的叫云雨图!
它用于展示多个数据集的分布:结合了小提琴展示的数据密度区域,箱线图展示的四分位数,以及散点图展示的具体的每一个点的分布!
又学到了~

图注:
Fig. 3 Composition and lifestyle of earthworm gut virome. G Abundance (Log10 RPKM) of prophage.
搜了一个学习资料:
https://jtr13.github.io/cc21fall2/raincloud-plot-101-density-plot-or-boxplotwhy-not-do-both.html
下面来看看怎么绘制吧!
半个扁平的小提琴来自包:https://github.com/PsyTeachR/introdataviz, 后面用到的函数为:geom_flat_violin
# you may have to install devtools first with
# install.packages("devtools")
devtools::install_github("psyteachr/introdataviz")
library(introdataviz)
加载一下其他所需要的包:
library(tidyverse)
library(magrittr)
library(ggplot2)
library(reshape2)
library(ggsci)
我这里用了一个基因表达矩阵,每一行为一个基因,每一列为一个样本:示例数据可以找我,微信:Biotree123,后面放到github上面:https://github.com/zhangj1115/example_data
df <- read.table("Expression.txt",header = T,sep = "\t",row.names = 1,comment.char = "")
df <- df[1:1000, ] # 这里区前1000行,只是为了画图好看,用所有的时候画出来的比较丑!
head(df)
df <- log2(df+1)
# variable.name:melt操作后,为新列变量取名
# value.name:新列对应值的变量名
data <- melt(df, variable.name="sample", value.name="expression")
head(data)
# head(data)
# sample expression
# 1 SRR1039508 5.083578
# 2 SRR1039508 4.562775
# 3 SRR1039508 3.765664
# 4 SRR1039508 1.966421
# 5 SRR1039508 7.308919
# 6 SRR1039508 6.138571
JACE_COLOR <- c("#FF5A5F", "#FFB400", "#007A87",
"#8CE071", "#7B0051", "#00D1C1", "#FFAA91", "#B4A76C",
"#9CA299", "#565A5C", "#00A04B", "#E54C20")
p <- ggplot(data = data, aes(x = sample, y = expression, fill = sample) ) +
geom_flat_violin(position = position_nudge(x = 0.3, y = 0), alpha = 0.5) + # 半小提琴图:introdataviz
geom_point(aes(y = expression, color = sample ), # 散点图
position = position_jitter(width = 0.1),
size = 0.5, alpha = 0.1) +
geom_boxplot(width = 0.1, outlier.shape = NA, alpha = 0.8) + # 箱线图
labs(y = "expression", x = NULL) + # 设置标题
guides(fill = FALSE, color = FALSE) + # 删除图例
scale_y_continuous(limits = c(0, 18)) + # 设置 y 轴范围
# 颜色
scale_fill_manual(values = JACE_COLOR[1:8]) +
scale_colour_manual(values = JACE_COLOR[1:8]) +
coord_flip() +
theme_bw()
p
结果如下:
