R语言如何绘制变异系数小提琴图

什么是变异系数小提琴图?

变异系数(Coefficient of Variation,简称CV)是一种用来衡量数据集相对离散程度的统计指标。它表示标准差与均值的比值,通常用于比较不同数据集或变量的离散程度。

它的计算方式也很简单,CV=标准差/平均值

变异系数小提琴图就是通过小提琴图来展示CV的分布。

绘图所需的数据

定量数据

数据来源一般是搜库结果定量表。包含2个维度的数据,一般情况下,每一行是一个基因,每一列是一个样本。

demo数据可以在这里下载https://www.r2omics.cn/res/demodata/heatmapAnno/data.txt

样本分组数据

对样本做分组。

demo数据可以在这里下载https://www.r2omics.cn/res/demodata/heatmapAnno/dfSample.txt

R语言如何绘制变异系数小提琴图

# 代码来源:https://www.r2omics.cn/
library(tidyverse)

# 读数据
df = read.delim("https://www.r2omics.cn/res/demodata/CV/data.txt",check.names = F)
dfGroup = read.delim("https://www.r2omics.cn/res/demodata/CV/group.txt",check.names = F)
colnames(df)[1] = "ID"

# 计算CV
dfCV = df %>%
  pivot_longer(-1, names_to = "Sample", values_to = "Value") %>%
  left_join(dfGroup) %>%
  group_by(ID,Group) %>%
  summarise(CV = sd(Value,na.rm=T)/mean(Value,na.rm=T)) %>%
  ungroup()

# 绘制小提琴图,展示CV分布
ggplot(dfCV,aes(x=Group,y=CV,fill=Group))+
  geom_violin(
    alpha = 1,       # 透明度
    trim = T,        # 是否修剪尾巴,即将数据控制到真实的数据范围内
    scale = "width", # 如果“area”(默认),所有小提琴都有相同的面积(在修剪尾巴之前)。如果是“count”,区域与观测的数量成比例。如果是“width”,所有的小提琴都有相同的最大宽度。

  )+
  geom_boxplot(width=0.15,
               fill="white",
               outlier.alpha = 0
  )+
  theme_bw()+
  scale_fill_manual(values = c("#58beb9","#f6a600"))

# 保存图片
# ggsave("CV.png",width = 5,height = 4,units = "in",dpi = 300)