gg.gap
这个包已经发布在Cran上了,可以直接install.packages('gg.gap')
进行安装,这里给出包的文档地址以供学习。
这个包的Description中提到ggplot2图中定义Y轴不是很容易,gg.gap()函数可以执行此操作,我们就来一探究竟。使用前我们先通过?gg.gap了解一下该函数。简单使用如下:
参数并不算多,我们来简单看一下:
参数 | 作用 |
plot | 'ggplot2'图形 |
ylim | y轴数值的限制 |
segments | 设置一段的间隔。如果你想给出多段间隔,请使用list()将它们连接起来。 |
tick_width | 设置每个分段的刻度。 |
rel_heights | 设置分段的相对高度,默认为1和0。 |
vjust | 垂直调整,默认为0 |
........ | ?gg.gap自行了解吧 |
示例
我们来看下文档中给的例子,是用了mtcars数据集示范。
先来个简单的柱形图
data(mtcars) library(ggplot2) p<-ggplot(data = mtcars, aes(x = gear, fill = gear)) + geom_bar() + ggtitle("Number of Cars by Gear") + xlab("Gears") p
先切一刀
通过设置segment=c(5,10)可以轻松将Y中从5到10处截断
library(gg.gap)# 加载包 gg.gap(plot=p, segments=c(5,10), ylim=c(0,50))
再来一刀
切俩段时候注意使用list函数包含俩段的范围,这里还用到tick_width = c(1,0.5,10),它的作用可以设置每个分段的刻度范围,如下图切分后的三个图,Y轴的数值范围就分别变为1,0.5,10了。
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参数可以设置Y轴片段的相对高度,用时自己调节数值至理想的样子即可。
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))
其他
- 我们可以设置
scale_y_continuous(trans = 'reverse')
将Y轴数值进行反转,从上往下数值由小到大,也是一种不错的选择。
#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') p #single segments and missing tick_width gg.gap(plot=p, segments=c(10,5), ylim=c(15,0))
- 在看文档时候,看到作者在新版本v1.3中增添了一个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))
以上就是gg.gap包截断Y轴的基本使用了,更多参数细节可以去看源文档,不多内容也就俩三页。
另一种思路(coord_cartesian函数)
其实Y轴截断是俩个范围的内的图形进行组合,再调整比例的设置,想起来之前看到一个帖子用到了coord_cartesian函数,再利用ggpubr包中的ggarrange进行俩个图形的拼接也可以实现目的,我们还以上面的柱形图举例:
library(ggpubr) p1<-ggplot(data = mtcars, aes(x = gear, fill = gear)) + geom_bar() + xlab("Gears")+ coord_cartesian(ylim = c(0,5)) p2<-ggplot(data = mtcars, aes(x = gear, fill = gear)) + geom_bar() + ggtitle("Number of Cars by Gear")+ labs(x=NULL,y=NULL,fill=NULL) + theme(axis.text.x = element_blank(),axis.ticks.x = element_blank()) + #去掉X轴和X轴的文字 coord_cartesian(ylim = c(10,50)) p1 p2 #拼起来 ggarrange(p2,p1,heights=c(1/5, 4/5),ncol = 1, nrow = 2,common.legend = TRUE,legend="right",align = "v")