R语言ggplot2绘制复杂小提琴图
加载ggplot2库
library(ggplot2)
生成一个20x19大小的矩阵,其中元素的值在0-1之间随机生成
testA = matrix(runif(n=380,0,1),20,19)
给矩阵的列名添加前缀'cancer'和字母A到S
colnames(testA) = paste0('cancer',LETTERS[1:19])
给矩阵的行名添加前缀'sample'和数字1到20
row.names(testA) = paste0('sample',1:20)
加载reshape2库
library(reshape2)
将矩阵转换为长格式的数据框,其中列名为'cancer',行名为'sample',值为'exp'
dataA = melt(testA, varnames = c('sample','cancer'), value.name = 'exp')
定义一个函数,根据标签生成颜色
get_label_colors <- function(labels,pal='Dark2',labels_unique=NULL,alpha=1){
如果未指定标签,则取唯一值
if (is.null(labels_unique)){ labels_unique <- sort(unique(labels)) }
选择一个调色板
palette <- RColorBrewer::brewer.pal(n=RColorBrewer::brewer.pal.info[pal,'maxcolors'],pal)
lab2col <-list() i <- 1 for (lab in labels_unique) { # 为每个标签生成一个颜色,调整透明度 lab2col[[lab]] <- grDevices::adjustcolor(palette[(i-1)%%length(palette) + 1],alpha) i <- i+ 1 }
colors <- c() for (lab in labels){ # 根据标签获取颜色 colors <- c(colors,lab2col[[lab]]) }
colors }
生成颜色向量,颜色与标签一一对应
colors = get_label_colors(unique(dataA$cancer))
绘制小提琴图
p1 <-ggplot(dataA,aes(cancer,exp,fill=cancer))+ geom_violin()+ coord_flip()+ scale_fill_manual(values = colors)+ stat_summary(fun=mean,geom = 'point', shape = 19, size = 2, color = 'black')+ theme_bw()+
添加两条水平虚线
geom_hline(aes(yintercept=0.6),colour='#565354',linetype='dashed')+ geom_hline(aes(yintercept=0.3),colour='#565354',linetype='dashed')+ xlab('')+ ylab('A indicator indicator A')+
设置主题
theme(panel.grid.major = element_blank(), panel.grid.minor = element_blank(), axis.text.y = element_text(size = 12, face = 'bold'), legend.title = element_blank(), legend.position = 'none')
生成四个图形对象
p <- list( p1, p1 + remove_y, p1+remove_y, p1+remove_y )
将四个图形对象组合成一行
wrap_plots(p, nrow=1)
将图形保存为pdf文件
ggsave('3.complex_violin.pdf',width = 8,height = 6)
原文地址: https://www.cveoy.top/t/topic/nJWd 著作权归作者所有。请勿转载和采集!