精通 R plot—第二部分:坐标轴

发布时间: 2016-03-15 阅读数: 18168

本文是精通R绘图系列文章的第二篇。

R中的标准绘图函数允许我们在绘图过程中对各个元素进行调整。在本篇文章,我们将学习如何在plot函数中控制坐标轴的各个方面(标签,刻度线...)。

坐标轴标题和标签

新建绘图数据并得到一幅默认设置的图形:

#新建数据
x<-1:100
y<-runif(100,-2,2)
#得到的默认设置的图形
plot(x,y)
#修改坐标轴标题
plot(x,y,xlab="Index",ylab="Uniform draws")

如下图所示:

图形设置通常通过par函数来实现(更多参数选项见?par)。一旦这些参数设置好,后面的图形都将适用,知道你重新设置回默认为止。当然,par函数中的一些参数(如cex.axis)同样可以在axistext函数中设置,但它们仅适用于你正在绘制的那幅图。

#修改轴标签和轴标题的尺寸
op<-par(no.readonly=TRUE) #保存默认设置
par(cex.lab=1.5,cex.axis=1.3)
plot(x,y,xlab="Index",ylab="Uniform draws")
#为了得到大尺寸的轴标题和标签,需要预留更大的空间
par(mar=c(6,6,3,3),cex.axis=1.5,cex.lab=2)
plot(x,y,xlab="Index",ylab="Uniform draws")

如下所示:

通过axis函数可以对坐标轴做更多设置。它可以用来控制在哪些坐标值处绘制刻度线,刻度线下放什么轴标签,轴线的类型和宽度,刻度线宽度,轴线和刻度线的颜色:

#利用axis函数对坐标轴作进一步的设置
par(op) #重置为默认设置
plot(x,y,xaxt="n") #不绘制x轴标签
axis(side=1,at=c(5,50,100)) #在x轴的5,50,150处绘制刻度线
#在刻度线处指定标签
plot(x,y,yaxt="n")
axis(side=2,at=c(-2,0,2),labels=c("Small","Medium","Big"))
#设置坐标轴线和标签
plot(x,y)
axis(side=3,at=c(5,25,75),lwd=4,lwd.ticks=2,col.ticks="red")
#移除图形四周的边框,只显示坐标轴线
plot(x,y,bty="n",xaxt="n",yaxt="n")
axis(side=1,at=seq(0,100,20),lwd=3)
axis(side=2,at=seq(-2,2,2),lwd=3)

上述代码最后一幅图如下:

注意,R图形有四个面。底部是起始位置,并按顺时针方向计数(即side=3是在顶部)。

刻度线

下面我们介绍如何精细化的控制刻度线,它可以通过par函数或axis函数来实现。

#通过par或axis函数精细化控制刻度线
par(tcl=0.4,mgp=c(1.5,0,0)) #tcl用来指定刻度线长度,正值表示在图形内部绘制刻度线,负值相反。
#mgp参数共有三个值,第一个控制图跟轴标题之间的行数,第二个控制图跟轴标签的行数,第三个值控制图跟轴线之间的行数
plot(x,y)
#下面使用axis函数控制刻度线
par(op)
plot(x,y,xaxt="n",yaxt="n",xlab="",ylab="")
axis(side=1,at=seq(5,95,30),tcl=0.4,lwd.ticks=3,mgp=c(0,0.5,0))
mtext(side=1,text="X axis",line=1.5) #利用mtext函数向坐标轴添加标题
axis(side=2,at=seq(-2,2,2),tcl=0.3,lwd.ticks=3,col.ticks="orange",mgp=c(0,0,2))
mtext(side=2,text="Numbers taken randomly",line=2.2)

上述代码最后一幅图如下:

从上面可以看出,mtext函数可以在图形以外的区域添加文本(我猜测mtext是"margin text"的简写)。通过mtext函数中的line参数来指定所添加文本的行数。line这个参数很重要,因为它决定了我们在设置par函数中的mar参数时取多大。mar参数包含四个值,它控制所绘制图形四个面距离相应边界有多少行是可用的。详情如下:

#注意line参数
plot(1:10,1:10,xlab="",ylab="",xaxt="n",yaxt="n")
for(i in 0:4){
  mtext(side=1,text=paste0("Line ",i),line=i)
}
for(i in 0:3){
  mtext(side=2,text=paste0("Line ",i),line=i)
}
#可以通过par函数中的mar参数来更改可用的行数
par(mar=c(7,2,2,2))
plot(1:10,1:10,xlab="",ylab="",xaxt="n",yaxt="n")
for(i in 0:6){
  mtext(side=1,text=paste0("Line ",i),line=i)
}
for(i in 0:1){
  mtext(side=2,text=paste0("Line ",i),line=i)
}

从最后一幅图可以看出,我们可以指定图形每一面可用的行数。通过par()$mar命令可以查看默认行数(注意,我们上面已经设置为7,2,2,2)。通过这种方法不但可以控制图形四面可用的空间,还可以控制在哪里添加轴标签或标题。下一篇文章我们进一步介绍如何作图形的精细化控制。

本文由雪晴数据网负责翻译整理,原文请参考Mastering R plot – Part 2: Axis作者Lionel Hertzog。转载请注明本文链接http://www.xueqing.tv/cms/article/150

分享到:
热门文章

REmap发布,用R绘制百度迁徙图

2015年07月23日更新 29785次阅读

精通 R plot—第一部分:颜色

2016年01月20日更新 24866次阅读

在R中填充缺失数据—mice包

2015年12月31日更新 24269次阅读

学习R语言,一篇文章让你从懵圈到入

2016年05月09日更新 23916次阅读

学习Tableau的六大好处(一个

2015年12月24日更新 19562次阅读

精通 R plot—第二部分:坐标

2016年03月15日更新 18168次阅读
热门课程

R语言初级课程

2015年02月20日发布 3293名学员

R语言数据分析入门

2016年05月10日发布 2152名学员

R语言高效数据清理工具包dplyr

2015年08月30日发布 1974名学员

[直播]上海财经大学Python科

2018年01月11日发布 1438名学员

如何用R做数据预处理

2016年06月03日发布 1337名学员

Python训练营课前必看

2017年12月10日发布 1265名学员
登录 注册