gg.gap诞生记
“站长,小站工具qPCR在线分析功能非常好,但有些基因的表达量太高了,图做出来值非常大,能否想prism那样把y轴做个截断呢?”
面对的疑问,站长最开始并没有想到去开发一个R包解决。
ggplot2以及依赖它开发的包已经丰富,原以为在网络搜索一下肯定有解决方案,但谁曾想这样的需求真的没有找到完美的解决方案。
为了完善这个看起来很平常的功能,站长决定亲自操刀去写个包。
路不平,大神助
一年的Coding经历,面对处理图形函数还是有点困难的。
不管三七二一,画个草图先:
思路很简单,就是先按照y轴切,然后用cowplot去拼接。
一顿野路子代码操作,beta版出来了:gg1gap和gg2gap这两个包只能完成bar图y轴切割,而截断数最多也就只能两段。
小站VIP群中的树神(微信ID:一棵树)精通R包制作,为了让野路子出来的代码更完善,拉上树神一起干,不仅实现截取多个截断,还可以对任意ggplot2对象进行截断,再不断测试修补bug之后,gg.gap终于在今天这个有意义的日子正式上线CRAN。大家可以通过下面的代码进行安装。
install.packages("gg.gap")
都能切什么图,切几段
理论上,ggplot2的图都能切,想切几段切几段。
以Bar图为例
切一段
切两段
切三段
切N段
切Boxplot+jitter
#install
install.packages("gg.gap")
data(mtcars)
library(ggplot2)
p
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
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
bp
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))
10000+:菌群分析 宝宝与猫狗 梅毒狂想曲 提DNA发Nature Cell专刊 肠道指挥大脑
系列教程:微生物组入门 Biostar 微生物组 宏基因组
专业技能:学术图表 高分文章 生信宝典 不可或缺的人