生信绘图good code 基因组数据绘图

小提琴图之ggplot_split_violin()及gghal

2021-07-14  本文已影响0人  芋圆学徒

美观的小提琴图是箱型图的升级版本,很多文章应用小提琴图为文章填色不少


文献
小提琴图

参考

代码来源Split Violin Plot for ggplot2 · GitHub
关注我们的公众号,可见详细复现Fancy violin (qq.com)

实战

我首先找到一个合适的颜色,并且定义了自己的作图主题

library(ggplot2)
library(ggsci)
library(ggpubr)
library(scales)

###自定义颜色
mypal=pal_simpsons(alpha = .6)(9)
mypal[c(1,7)]
show_col(mypal)
show_col(mypal[c(1,7)])

###自定义主题
mytheme <- theme(axis.text.x=element_text(size=12), 
                 axis.text.y=element_text(size=12), 
                 axis.title=element_text(size = 13), 
                 legend.text=element_text(size=12),
                 legend.title=element_text(size=12),
                 axis.line = element_line(size=0.7), 
                 panel.border = element_blank(),
                 panel.grid = element_blank())

方法一

方法一
###数据生成
cell <- rep(LETTERS[1:10],400)
sp <- rep(c("normal","tumor"),time=c(2000,2000))
value <- c(rnorm(2000)+1,rnorm(2000)+2)
df <- data.frame(cell=cell,sample=sp,value=value)


###作图
ggplot(df,aes(x=cell,y = value,fill=sample))+
  geom_split_violin(trim = T,colour=NA)+
  geom_point(stat = 'summary',fun=mean,
             position = position_dodge(width = 0.9))+
  scale_fill_manual(values = c("#197EC099","#FED43999"))+
  stat_summary(fun.min = function(x){quantile(x)[2]},
               fun.max = function(x){quantile(x)[4]},
               geom = 'errorbar',color='black',
               width=0.01,size=0.5,
               position = position_dodge(width = 0.9))+
  theme_bw()+
  mytheme+
  ylab("Value")+xlab("Type")

方法二

方法二
ggplot()+
  geom_half_violin(
    data = df %>% filter(sample=="normal"),
    aes(x = cell,y = value),colour=NA,fill="#197EC099",side = "l"
  )+
  geom_half_violin(
    data = df %>% filter(sample=="tumor"),
    aes(x = cell,y = value),colour=NA,fill="#FED43999",side = "r"
  )+
  mytheme+
  theme_bw()+
  ylab("Value")+xlab("Type")+
  geom_point(data = df,aes(x=cell,y = value,fill=sample),
             stat = 'summary',fun=mean,
             position = position_dodge(width = 0.7))+
  stat_summary(data = df,aes(x=cell,y = value,fill=sample),
               fun.min = function(x){quantile(x)[2]},
               fun.max = function(x){quantile(x)[4]},
               geom = 'errorbar',color='black',
               width=0.01,size=0.5,
               position = position_dodge(width = 0.7))+
  stat_compare_means(data = df,aes(x=cell,y = value,fill=sample),label = 'p.signif')
  

总的来说,两种方法得到的结果一样,方法一依赖包装好的函数,方法二较为成熟,可以直接使用gghalves包。

上一篇下一篇

猜你喜欢

热点阅读