查看原文
其他

你与高颜值的图形只有一段代码的距离~

安诺基因 安诺基因 2020-01-18


最近小编一直在和大家分享如何利用R语言做图,然而图形中离不开的坐标轴有意见了,向小编抗议为啥一直不给他露面的机会。小编不能厚此薄彼不是,今天小编介绍的主角就是在图片中起着非常重要作用的坐标轴。很多小伙伴们画图过程中经常遇到需要对坐标轴进行截取或设置双坐标轴的情况,该怎么做?看下面~


1

坐标轴截断画图


小伙伴们经常在群里或论坛中提出这样的疑问:遇到的数据不在一个数量级上,但又要在图上同时反映大数据和小数据的变化规律,需要对坐标轴进行截断,怎么破


小编向大家推荐R语言plotrix包中的gap.plot, gap.barplot和gapboxplot进行画图(使用excel进行截断坐标轴的同学请自行飘过)。


1. plotrix包安装


如果你还没有安装plotrix包,请抓紧安装,打开R输入界面,输入如下代码:

>install.packages (“plotrix”)

>plotrix)

 

2. 相关介绍


axis breaks主要是在已生成图片上直接进行坐标轴的截断,留下一个个缺口,“简单粗暴”,但坐标轴的实际长度并没有变化,看似没什么用处,然而真的如此么?别着急,请往下移。

 

接着就是gap.plot, gap.barplot 和 gapboxplot,它们的用法相似,可以画出截取坐标轴后的散点图,柱状图和箱线图,下面以柱状图为例进行说明。

 

3. 主要用法


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继续挖掘喽。 


2

双坐标轴画图


下面小编将为大家介绍另一个与坐标轴相关的函数: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 的功能远不止这些,还可以绘制出更为精美的堆叠图,感兴趣的小伙伴可以继续深挖哦!今天小编的分享就到这里,我们下次在继续~


    您可能也对以下帖子感兴趣

    文章有问题?点此查看未经处理的缓存