@ 小提琴图分类
这类图该怎么做呢,代码在下面
导入数据
library(ggplot2)
library(reshape2)
data <- read.table(inputFile, header=T,sep="\t",check.names=F,row.names=1)
x=colnames(data )[1] ##定义X轴
colnames(data )[1]="Type"
数据长这个样
根据变量进行差异分析
geneSig=c("")
for(gene in colnames(data )[2:ncol(data )]){
rt1=data [,c(gene,"Type")]
colnames(rt1)=c("expression","Type")
p=1
if(length(levels(factor(rt1$Type)))>2){
test=kruskal.test(expression ~ Type, data = rt1)###多元素比较
p=test$p.value
}else{
test=wilcox.test(expression ~ Type, data = rt1)##两个元素比较
p=test$p.value
}
Sig=ifelse(p<0.001,"***",ifelse(p<0.01,"**",ifelse(p<0.05,"*","")))
geneSig=c(geneSig,Sig)
}
colnames(rt)=paste0(colnames(rt),geneSig)
绘图
#把数据转换成ggplot2文件
data=melt(rt,id.vars=c("Type"))
colnames(data)=c("Type","Gene","Expression")
ggplot(data,aes(x=Type,y=Expression,fill=Type)) +
geom_violin(trim=FALSE,color="white")+ labs(fill = 'Type')+
geom_boxplot(width=0.2,position=position_dodge(0.9))+
scale_fill_manual(values = c("#FF8C00", "#00FFFF",'#DC143C','#7FFF00'))+ #根据type数目设置颜色
theme_bw()+facet_wrap(~Gene,nrow =4,ncol = 3)+###分组函数
theme(#legend.position = 'none',
strip.background=element_rect(colour="white",fill="white"),##上面分组名字的颜色和框颜色
strip.text = element_text(size = 15,colour="black",family="Times"),##对分组名字字体调整
panel.grid.major = element_blank(),panel.grid.minor = element_blank(),#不显示网格线
panel.border = element_rect(colour = "black", fill=NA, size=1), #去除默认填充的灰色,并将x=0轴和y=0轴加粗显示(size=1)
axis.line = element_line(colour = "black"),
legend.title=element_text(face="italic", family="Times", colour="black"),#设置图例的总标题的字体属性
axis.text.x=element_text(angle=20,hjust = 1,colour="black",family="Times",size=13),
axis.title.y=element_text(family="Times",size = 20,face="plain"),#设置y轴标题的字体属性
legend.text=element_text(face="italic", family="Times", colour="black"), #设置图例的子标题的字体属性
xis.title.y=element_text(family="Times",size = 20,face="plain"), #设置y轴标题的字体属性
ylab("Value")+xlab(""), #设置x轴和y轴的标题)