# 代码来源: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)