美文网首页
ggplot作图问题:科学计数法和标题换行

ggplot作图问题:科学计数法和标题换行

作者: KS科研分享与服务 | 来源:发表于2023-03-30 16:15 被阅读0次

    真的是实践出真知啊,很多小细节问题,平时自己作图的时候也没有注意过,更没有思考过。最近小伙伴找作图,在小伙伴的仔细琢磨下,也是发现了平时没有注意的小问题,这里提示下,希望对你的学习有帮助。示例数据我们使用批量箱线图(复现《nature communications》图表(二):一劳永逸,R语言一键画表达量箱线图并添加显著性),数据代码在我们的QQ群文件,这里不再说明。首先还是按照之前的帖子我们作图:

    library(RColorBrewer)
    library(ggpubr)
    library(ggplot2)
    library(cowplot)
    setwd("D:/KS项目/公众号文章/ggplot标题换行科学计数法")
    Exp <- read.csv("Exp.csv",header=T,row.names=1)
    info <- read.csv("info.csv",header=T)
    Exp_plot <- Exp[info$Sample,]
    Exp_plot$group=info$Type
    Exp_plot$group <- factor(Exp_plot$group,levels=c("Asymptomatic","Mild","Severe","Critical"))
    plist<-list()
    col <-c("#5CB85C","#337AB7","#F0AD4E","#D9534F")
    for (i in 1:ncol(Exp)){
      data <- Exp_plot[,c(colnames(Exp)[i],"group")]#循环提取每个基因表达信息
      colnames(data)<-c("Expression","group")#统一命名
      my_comparisons1 <- list(c("Asymptomatic", "Mild")) #设置比较组
      my_comparisons2 <- list(c("Asymptomatic", "Severe"))#设置比较组
      my_comparisons3 <- list(c("Asymptomatic", "Critical"))#设置比较组
      my_comparisons4 <- list(c("Mild", "Severe"))#设置比较组
      my_comparisons5 <- list(c("Mild", "Critical"))#设置比较组
      my_comparisons6 <- list(c("Severe", "Critical"))#设置比较组
      p <- ggboxplot(data,#ggboxplot画箱线图
                     x="group",#x轴为组别
                     y="Expression",#y轴为表达量
                     color="group",#用样本分组填充
                     fill=NULL,
                     add = "jitter",#添加散点
                     bxp.errorbar.width = 0.6,
                     width = 0.4,
                     size=0.01,
                     font.label = list(size=30), 
                     palette = col)+
        theme(panel.background =element_blank(),
              axis.line=element_line(colour="black"),
              axis.title.x = element_blank(),
              axis.title.y = element_blank(),
              axis.text.x = element_text(size = 10,colour = 'black', angle = 45, hjust = 1),
              axis.text.y = element_text(size = 10,colour = 'black'),
              legend.position ='none',
              plot.title = element_text(hjust = 0.5,size=12,face="bold"))+
        ggtitle(colnames(Exp)[i])+
        stat_compare_means(method="t.test",hide.ns = F,
                           comparisons =c(my_comparisons1,my_comparisons2,my_comparisons3,my_comparisons4,my_comparisons5,my_comparisons6),
                           label="p.signif")
    
      plist[[i]]<-p 
    } 
    #cowplot函数
    p1 <-plot_grid(plist[[1]],plist[[2]],plist[[3]],
                    plist[[4]],plist[[5]],plist[[6]],ncol=3)
    p1
    

    这个图乍一看没啥问题,但有三个改进地方:

    • 标题问题,有的标题太长,需要换行,换行一般使用\n字符,但是循环中有多个标题的时候无法使用。
    • 显著性标记都突出坐标轴了,x轴文字也突出,有些看不见了。
    • y轴数字科学计数法设置。

    接下来我们一次性解决这几个问题:

    plist2<-list()
    col <-c("#5CB85C","#337AB7","#F0AD4E","#D9534F")
    
    
    for (i in 1:ncol(Exp)){
      data <- Exp_plot[,c(colnames(Exp)[i],"group")]#循环提取每个基因表达信息
      colnames(data)<-c("Expression","group")#统一命名
      my_comparisons1 <- list(c("Asymptomatic", "Mild")) #设置比较组
      my_comparisons2 <- list(c("Asymptomatic", "Severe"))#设置比较组
      my_comparisons3 <- list(c("Asymptomatic", "Critical"))#设置比较组
      my_comparisons4 <- list(c("Mild", "Severe"))#设置比较组
      my_comparisons5 <- list(c("Mild", "Critical"))#设置比较组
      my_comparisons6 <- list(c("Severe", "Critical"))#设置比较组
      p <- ggboxplot(data,#ggboxplot画箱线图
                     x="group",#x轴为组别
                     y="Expression",#y轴为表达量
                     color="group",#用样本分组填充
                     fill=NULL,
                     add = "jitter",#添加散点
                     bxp.errorbar.width = 0.6,
                     width = 0.4,
                     size=0.01,
                     font.label = list(size=30), 
                     palette = col)+
        theme(panel.background =element_blank(),
              axis.line=element_line(colour="black"),
              axis.title.x = element_blank(),
              axis.title.y = element_blank(),
              axis.text.x = element_text(size = 10,colour = 'black', angle = 45, hjust = 1),
              axis.text.y = element_text(size = 10,colour = 'black'),
              legend.position ='none',
              plot.title = element_text(hjust = 0.5,size=10,face="bold"),
              plot.margin=unit(c(0.5, 0.5, 0.5, 0.5),'cm'))+
        ggtitle(str_wrap(colnames(Exp)[i],15))+
        stat_compare_means(method="t.test",hide.ns = F,
                           comparisons =c(my_comparisons1,my_comparisons2,my_comparisons3,my_comparisons4,my_comparisons5,my_comparisons6),
                           label="p.signif")+
        scale_y_continuous(expand = expansion(mult = c(0.05, 0.1)),
                           labels = scales::scientific)
    
      plist2[[i]]<-p #将画好的图储存于plist2列表,并不断赋值循环直到结束
    } 
    
    
    #cowplot函数
    p2 <-plot_grid(plist2[[1]],plist2[[2]],plist2[[3]],
                   plist2[[4]],plist2[[5]],plist2[[6]],ncol=3)
    p2
    

    有时候,会自动进行科学计数法的坐标轴,如果强制所有都不需要,只需要一句代码:options(scipen=200)。好了。这所有内容了,解决了一些细节问题,在实际的使用中还是挺有用的。觉得有用的点个赞,分享一下呗!

    相关文章

      网友评论

          本文标题:ggplot作图问题:科学计数法和标题换行

          本文链接:https://www.haomeiwen.com/subject/kuefddtx.html