前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >如何随意截断ggplot2图像的y轴?

如何随意截断ggplot2图像的y轴?

作者头像
Chris生命科学小站
发布2023-02-28 19:48:13
1.4K0
发布2023-02-28 19:48:13
举报

gg.gap诞生记

“站长,小站工具qPCR在线分析功能非常好,但有些基因的表达量太高了,图做出来值非常大,能否想prism那样把y轴做个截断呢?”

面对的疑问,站长最开始并没有想到去开发一个R包解决。 ggplot2以及依赖它开发的包已经丰富,原以为在网络搜索一下肯定有解决方案,但谁曾想这样的需求真的没有找到完美的解决方案。 为了完善这个看起来很平常的功能,站长决定亲自操刀去写个包。

路不平,大神助

一年的Coding经历,面对处理图形函数还是有点困难的。 不管三七二一,画个草图先:

思路很简单,就是先按照y轴切,然后用cowplot去拼接。 一顿野路子代码操作,beta版出来了:gg1gap和gg2gap这两个包只能完成bar图y轴切割,而截断数最多也就只能两段。

小站VIP群中的树神(微信ID:一棵树)精通R包制作,为了让野路子出来的代码更完善,拉上树神一起干,不仅实现截取多个截断,还可以对任意ggplot2对象进行截断,再不断测试修补bug之后,gg.gap终于在今天这个有意义的日子正式上线CRAN。大家可以通过下面的代码进行安装。

代码语言:javascript
复制
install.packages("gg.gap")

都能切什么图,切几段

理论上,ggplot2的图都能切,想切几段切几段。

以Bar图为例

切一段

切两段

切三段

切N段

切散点图

切折线图

切Boxplot+jitter

代码语言:javascript
复制
#install
install.packages("gg.gap")
data(mtcars)
library(ggplot2)
p<-ggplot(data = mtcars, aes(x = gear, fill = gear)) +
    geom_bar() +
    ggtitle("Number of Cars by Gear") +
    xlab("Gears")

#single segments and missing tick_width
gg.gap(plot=p,
       segments=c(5,10),
       ylim=c(0,50))
#tick_width can be one or more numbers
gg.gap(plot=p,
       segments=c(5,10),
       tick_width = c(1,10),
       ylim=c(0,50))
#segments list cantains more than one number vectors
gg.gap(plot=p,
       segments=list(c(2.5,4),c(5,10)),
       tick_width = c(1,0.5,10),
       ylim=c(0,50))
#rel_heights can set the relative height for segments and segmented y-axis
gg.gap(plot=p,
       segments=list(c(2.5,4),c(5,10)),
       tick_width = c(1,0.5,10),
       rel_heights=c(0.2,0,0.2,0,1),
       ylim=c(0,50))
#reversed y-axis
p<-ggplot(data = mtcars, aes(x = gear, fill = gear)) +
    geom_bar() +
    ggtitle("Number of Cars by Gear") +
    xlab("Gears")+
    scale_y_continuous(trans = 'reverse')
#single segments and missing tick_width
gg.gap(plot=p,
       segments=c(10,5),
       ylim=c(15,0))
#add.legend
library(ggplot2)
mtcars$gear <- factor(mtcars$gear)
bp <- ggplot(data = mtcars, aes(x = gear, fill = gear)) +
    geom_bar() +
    ggtitle("Number of Cars by Gear") +
    xlab("Gears")
gg.gap(plot = bp,
       ylim = c(0,16),
       segments = c(6,8))
add.legend(plot = bp,
           margin = c(top=1,right=1,bottom=1,left=460))
本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-10-06,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Chris生命科学小站 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • gg.gap诞生记
  • 路不平,大神助
  • 都能切什么图,切几段
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档