美文网首页
科研绘图模板之小提琴分面图

科研绘图模板之小提琴分面图

作者: Bioinfor生信云 | 来源:发表于2025-01-15 16:03 被阅读0次

小提琴分面图(Violin plot)是一种用于展示和比较数据分布的可视化图形。它类似于箱线图,但提供了更多关于数据分布密度的信息。小提琴图的核心是小提琴形状,这种形状是通过核密度估计(KDE)来展示数据分布的密度。

小提琴图的组成:

  1. 中心标记:通常在小提琴的中心有一条线或一个点来标记数据的中位数。
  2. 箱线图:有时在小提琴内部会绘制一个简化的箱线图,表示四分位数和极值。
  3. 密度轮廓:小提琴的主体显示数据的密度,宽度表示在该值处的数据密度较高。
  4. 分面:分面是指将数据集分割成多个子集来单独展示每个子集的小提琴图,通常用于比较不同类别或组内的数据分布。

小提琴图的用途:

  • 比较多个分组:小提琴图能够直观地比较不同分组或类别中的数据分布。
  • 显示数据分布的对称性和偏态:通过观察小提琴的形状,可以容易地判断数据的对称性和是否存在偏态。
  • 详细展示数据的多样性:与传统的箱线图相比,小提琴图提供了更多的信息,帮助理解数据在各个值上的密度。

示例

library(ggplot2)
library(reshape2)

inputFile <- "input.txt"
outFile <- "vioplot.pdf"

# 读取输入文件
rt <- read.table(inputFile, header=TRUE, sep="\t", check.names=FALSE, row.names=1)
colnames(rt)[1] <- "Type"  # 只更改一次列名

# 差异分析
geneSig <- sapply(colnames(rt)[-1], function(gene) {
  rt1 <- rt[, c(gene, "Type")]
  test <- if (length(levels(factor(rt1$Type))) > 2) {
    kruskal.test(expression ~ Type, data = rt1)
  } else {
    wilcox.test(expression ~ Type, data = rt1)
  }
  # 根据p值赋予标记
  ifelse(test$p.value < 0.001, "***", ifelse(test$p.value < 0.01, "**", ifelse(test$p.value < 0.05, "*", "")))
})
colnames(rt)[-1] <- paste(colnames(rt)[-1], geneSig, sep="")

# 准备ggplot2绘图数据
data <- melt(rt, id.vars="Type")
colnames(data) <- c("Type", "Gene", "Expression")

# 绘制小提琴图
p1 <- ggplot(data, aes(x=Type, y=Expression, fill=Type)) +
  geom_violin() +
  geom_boxplot(width=0.2, position=position_dodge(0.9)) +
  facet_wrap(~Gene, nrow=1) +
  labs(x="Sample Type", y="Gene Expression", fill="Sample Type") +
  theme_bw() +
  theme(axis.text.x=element_text(angle=45, hjust=1))

# 输出图像
ggsave(filename=outFile, plot=p1, width=9, height=5, device="pdf")

  • 载入库ggplot2 用于绘图,reshape2 用于数据重塑。

  • 读取数据:使用read.tableinput.txt读取数据,其中包含表头,字段间以制表符分隔。将第一列作为行名,且保留原有列名(除第一列外,该列被重命名为"Type")。

  • 差异分析:通过sapply函数对除“Type”列外的每一列(即每个基因)进行统计测试。根据“Type”分类,使用Kruskal-Wallis或Wilcoxon秩和检验来判断表达量差异的显著性。

    • 如果“Type”变量有超过两个水平,则使用Kruskal-Wallis检验。
    • 如果只有两个水平,则使用Wilcoxon秩和检验。
  • 显著性标记:根据p值添加显著性标记(***, **, *, "")。

  • 更新列名:将显著性标记添加到相应基因的列名中。

  • 重塑数据:使用melt函数将数据从宽格式转换为长格式,以便于ggplot2绘图。在此过程中,保留“Type”作为分类变量,其他列(基因及其显著性标记)转换为变量名和值。

  • 构建图层

    • geom_violin:绘制小提琴图,显示数据分布。
    • geom_boxplot:在小提琴图中间叠加一个窄宽度的箱线图,用于显示中位数和四分位数。
  • 分面展示facet_wrap按基因分面显示,每行显示一个基因。

  • 调整图形外观:设置主题(theme_bw())和调整x轴文本角度(以便更好地显示长标签)。

  • 保存为PDF文件ggsave函数直接保存绘制的图形为PDF格式,指定文件名、尺寸等。

相关文章

网友评论

      本文标题:科研绘图模板之小提琴分面图

      本文链接:https://www.haomeiwen.com/subject/yqicfjtx.html