美文网首页GEO
ggplot2截断纵坐标--后续

ggplot2截断纵坐标--后续

作者: 小洁忘了怎么分身 | 来源:发表于2020-04-28 14:25 被阅读0次

    前情提要

    ggplot2不能截断纵坐标肿么办
    讲了几种截断方法,各有长短,我在这篇文章发出去后收到两个反馈,特来与大家分享​

    新方法1.拼图

    出处:https://huifangliu.github.io/2018/06/01/R语言-ggplot2画图如何截断-y-轴/


    实现从A到B,上下两部分图画出来,然后拼到一起即可

    (1)举重若轻三步走

    #导入包
    library(ggplot2)
    library(ggpubr)
    #数据
    data <- data.frame(x = c("Alpha","Bravo","Charlie","Delta"),y=c(200,20,10,15))
    #画下面
    p1 <- ggplot(data,aes(x=x,y=y,fill=x)) + 
      geom_bar(stat='identity',position=position_dodge()) +
      labs(x=NULL,y=NULL,fill=NULL)+    #可自定义标签名字
      coord_cartesian(ylim = c(0,25))   #设置下面一半的值域
    #画上面
    p2 <- ggplot(data,aes(x=x,y=y,fill=x)) + geom_bar(stat='identity',position=position_dodge()) +
      labs(x=NULL,y=NULL,fill=NULL) +   #不要标签
      theme(axis.text.x = element_blank(),axis.ticks.x = element_blank()) +     #去掉X轴和X轴的文字
      coord_cartesian(ylim = c(195,205)) +  #设置上面一半的值域
      scale_y_continuous(breaks = c(195,205,5)) #以5为单位划分Y轴
    #拼起来
    ggarrange(p2,p1,heights=c(1/5, 4/5),ncol = 1, nrow = 2,common.legend = TRUE,legend="right",align = "v")
    

    重点在于:设置y轴值域,设置p2的刻度、不要x轴标签和名字,以及拼图设置高度比。

    (2)patchwork拼图也很可

    library(patchwork)
    p2 <- ggplot(data,aes(x=x,y=y,fill=x)) + geom_bar(stat='identity',position=position_dodge()) +
      labs(x=NULL,y=NULL,fill=NULL) +   #不要标签
      theme(axis.text.x = element_blank(),axis.ticks.x = element_blank(),legend.position = "none") +    #去掉X轴和X轴的文字
      coord_cartesian(ylim = c(195,205)) +  #设置上面一半的值域
      scale_y_continuous(breaks = c(195,205,5)) #以5为单位划分Y轴
    
    
    layout <- '
    A
    B
    B
    B
    B
    '
    p2 + p1 + plot_layout(design = layout)
    

    2.新方法2:gg.gap包

    上次的文章发出去后,gg.gap包的作者chris_lou给我留言,可以用他的包!我一看,果然是非常好用!

    分享能带来什么呢,曾以为就是自己记录下来,印象深刻,顺便可以帮助一下别人。这次不一样,有被帮助到!感谢大佬!

    下面的代码来自包的帮助文档,套在刚才的数据上。

    #install.packages("gg.gap")
    library(gg.gap)
    library(ggplot2)
    library(patchwork)
    #数据
    data <-
      data.frame(x = c("Alpha", "Bravo", "Charlie", "Delta"),
                 y = c(200, 20, 10, 15))
    #画图
    p1 = ggplot(data, aes(x = x, y = y, fill = x)) +
      geom_bar(stat = 'identity', position = position_dodge(),show.legend = FALSE) +
      theme_bw() +
      labs(x = NULL, y = NULL)
    
    p1
    p2 =gg.gap(plot = p1,
               segments = c(25, 190),
               tick_width = 10,
               rel_heights = c(0.25, 0, 0.1),
               ylim = c(0, 200)
               )
    p1+p2
    

    segments是表示切分位置的向量,tick_width是刻度单位,rel_height表示切分成的两段它的高度比例。高度比例可以多次调整,让上下两部分看起来整体度高一些。

    和上面的方法是相似的~但是做成包更香!

    相关文章

      网友评论

        本文标题:ggplot2截断纵坐标--后续

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