你与高颜值的图形只有一段代码的距离~
小伙伴们经常在群里或论坛中提出这样的疑问:遇到的数据不在一个数量级上,但又要在图上同时反映大数据和小数据的变化规律,需要对坐标轴进行截断,怎么破?
小编向大家推荐R语言plotrix包中的gap.plot, gap.barplot和gapboxplot进行画图(使用excel进行截断坐标轴的同学请自行飘过)。
如果你还没有安装plotrix包,请抓紧安装,打开R输入界面,输入如下代码:
>install.packages (“plotrix”)
>plotrix)
axis breaks主要是在已生成图片上直接进行坐标轴的截断,留下一个个缺口,“简单粗暴”,但坐标轴的实际长度并没有变化,看似没什么用处,然而真的如此么?别着急,请往下移。
接着就是gap.plot, gap.barplot 和 gapboxplot,它们的用法相似,可以画出截取坐标轴后的散点图,柱状图和箱线图,下面以柱状图为例进行说明。
gap.barplot的主要用法为:gap.barplot (y,gap,,xtics,yaxlab,,,xlab, ylab, col),主要参数为(详见help("gap.barplot")):
这么多参数,小编自己都有点晕乎啦
打起精神,实战来啦!假设一组数据w为森林里15种植株的生长高度(假设哦):
61.2, 50.3, 54.6, 57.8)
>
> ylab = "height", main="test image")
可得到如下图片:
如图所示:坐标轴截好了,但你是不是感觉到哪里不对了?等等,中间那两道横线是什么鬼,这么难看的图片!!
这个时候axis breaks就派上用场了:
其主要用法为(axis=1,breakpos, bgcol, breakcol, style, brw),主要参数为 (详见help"axis.break")):
实现代码如下:
>axis.break(2,90,breakcol="snow",style="gap")##去掉中间的那两道横线;
>axis.break(2,90*(1+0.02),breakcol="black",style="slash")##在左侧Y轴把gap位置换成slash;
>axis.break(4,90*(1+0.02),breakcol="black",style="slash")##在右侧Y轴把gap位置换成slash;
Now,现在看着是不顺眼多啦?好啦,坐标轴截取部分小编要收工啦,gap.plot,gapboxplot 和 gap.barplot的用法相似,其实gap.plot, gap.barplot 和 gapboxplot三个函数并非完美,它们并不能完整使用出plot, barplot 和 boxplot的所有参数,没有完美的函数,只有对完美不断的追求,有兴趣的小伙伴可以去ggplot继续挖掘喽。
下面小编将为大家介绍另一个与坐标轴相关的函数:twoord.plot,画出双X轴或双Y轴,在这里小编推荐的是plotrix包中twoord.plot函数,其主要用法为:
twoord.plot(lx,ly,rx,ry,main,xlim,lylim,rylim,lcol,rcol,xlab,lytickpos,ylab,rytickpos,rylb,
ype,xtickpo,xticklab,halfwidth,axislab.cex=1,do.first)
重点参数解释 (详细参数见help(“twoord.plot”)):
这么多参数,小编又有点晕乎啦~
咳,话不多说,直接贴代码: 现有一组数据表明班上同学的身高和体重:
>d<data.frame(name=c("lily","xiaoming","jim","tom","lucy"),weight=c(50,62,79,60,48),height=c(170,169,180,170,165)),
>lrx <- c(1:5)
>y2 <- d$height
>twoord.plot(lrx,y1,lrx,y2,xlim=c(0,6),lylim=c(0,100),rylim=c(100,190),lcol="green",rcol="red",main ="身高体重分布",xlab="name",ylab="Weight",rylab="Height",type=c("bar","b"),xticklab=d$name,halfwidth=0.4)
通过以上命令我们会得到如下的图片:
有没有被图片吓到的小伙伴,小编也是被吓了一跳,图中问题很多,首先左侧坐标轴集中显示,很拥挤;另外颜色也亮瞎眼;背景过于单薄,想添加网格线; 别着急,看接着怎么调整:
>twoord.plot(lrx,y1,lrx,y2,xlim=c(0,6),lylim=c(0,100),rylim=c(100,190),lcol="green4,rcol="red",main ="身高体重分布", xlab="name", ylab="Weight",rylab="Height", type=c("bar","b"), xticklab=d$name, halfwidth=0.4, lytickpos=c(0,25,50,75,100), axislab.cex=1.2, do.first="plot_bg(); grid(col=\"white\",lty=1)")
到这里,细心的小伙伴会发现添加了lytickpos 和 do.first来改变左侧坐标轴的位置和背景颜色及网格的设置,你也可以使用 halfwidth 来改变图中柱子的宽度,当然,如果你不想使用柱状图和点线来表示,可以在type参数里更改你想要的哦。
其实 twoord.plot 的功能远不止这些,还可以绘制出更为精美的堆叠图,感兴趣的小伙伴可以继续深挖哦!今天小编的分享就到这里,我们下次在继续~