[3]R语言在数据处理上的禀赋——par参数详解(一)

来源:互联网 发布:pycharm使用教程 mac 编辑:程序博客网 时间:2024/05/21 06:49

这一篇介绍par参数比较基础的几个参数用法,涉及颜色,字体,线条和符号,坐标轴,添加图例,组合做图留到下一篇文章。

本文首发:program-dog.blogspot.com

上一篇文章已经详细的介绍了R语言可视化技术的基本做图方法,参数的权限机制,并且已经举了不少做图的例子。但是貌似还有一些细节的地方没有提及,比如如何控制做图的颜色,大小以及比例,线条及点的形状,坐标轴,添加图例,组合做图等。这些看起来琐碎并且麻烦的东西,在R语言中得到优雅的处理,你不必为了一个线条或者图形的位置而编写什么诸如for循环之类的东西,实际上你只需要修改一下参数即可。到底是什么参数这么厉害呢?

如果你没有看上一篇文章,可以点击这里,或者你对R的可视化已经相当熟悉,可以直接往下看。

公共参数列表 par

还是先回忆一下R的权限机制。在R语言做图中,可以简单的通过配置参数达到想要的效果,但是参数有很多,有必要进行分类,避免滥用或浪费。比如有一些参数如颜色大小是可以通用的,被分到了par里面,作为公共参数集合;还有一些如坐标轴就只能有类似plot这样的函数保有,给别人人家也用不到那些啊。如果plot的坐标轴要用颜色相关的属性,那么就可以直接去par中取来用就是了。如果title想用字体这个属性,也可以去par中取。所以par理所当然的可以被称为公共参数列表了。

下面介绍一下par的参数以及用法。

颜色相关

先来看看和颜色相关的参数:

bg  # 背景色fg  # 前景色col # 颜色

bg和fg和含义一般编程语言中颜色的含义相同,下面举例说明一下:

先看代码:

opar<-par(no.readonly = TRUE)x <- seq(1,10,length.out = 100) -5y <- c(log(x[x>0]),log(abs(x[x<=0]))) #控制x大于0,看起来像乳房,怪数学par(fg="red") #也可以写成类似 #ffffff形式par(bg="black")plot(x,y,type="l")title(main="Black bg And Red fg",      col.main="yellow", #col的用法,下面介绍      sub="By program-dog.blogspot.com", #版权信息      col.sub="white")par(opar)

在看效果:

不见图,请翻墙

再来看col,col是颜色的意思,可以用来特指某某是什么颜色。比如:

x <- seq(1,10,length.out = 100) -6y <- x^2+10z <- x^2+10plot(x,y,type="l",col="red",ylim=c(5,15))lines(x,z,type="l",col="green")title(main="col的用法",      sub="By program-dog.blogspot.com" #版权信息)

不见图,请翻墙

col有一些参数是预设的,如下:

col.axis #坐标轴col.lab  #标签col.main #题目col.sub  #副题目

上面已经用过题目和副题目了,这里就不再举例子了。

字体相关

和字体相关的参数有下面几个:

family #全局字体,特指字体的类型,如宋体还是楷体font   #字体,特指字体的形态,如斜体还是粗体

先来看一看这个family,顾名思义,它是一个“家族”,掌管着做图的全局字体。举例说明一下:

代码:

opar<-par(no.readonly = TRUE)par(mfrow=c(2,1))    #设置布局x<- -10:10y<- -(x^2)# mono字体par(family="mono")plot(x,y,type='l')title(main="family mono style",      sub="By program-dog.blogspot.com" #版权信息)# 默认字体par(family="")plot(x,y,type='l')title(main="family default style",      sub="By program-dog.blogspot.com" #版权信息)par(opar)

效果图:

不见图,请翻墙

仔细观察,不仅仅题目的字体不一样,包括线条,标签的字体也不一样,这就是所谓的“family”效果。

关于family字体的选择,可以参见R文档,这里不再赘述.

再来看看font,font就是字体的意思,这里特指字体的形态(如斜体和粗体),但是这个font和col一样,可以用在特定的位置指明字体,也有几个预设的参数:

font.axis #坐标轴font.lab  #标签font.main #题目font.sub #副题目

用法和col大同小异:

opar<-par(no.readonly = TRUE)x<- seq(-10,10,length.out = 100)y<- sin(x)par(font.axis=1) # 1 普通文本par(font.lab=2) # 2 粗体par(font.main=3) # 3 斜体par(font.sub=4) # 4 粗斜体plot(x,y,type='l')title(main="font style",      sub="By program-dog.blogspot.com" #版权信息)par(opar)

效果图:

不见图,请翻墙

font是用数字来指明的,再次提醒一下,这里的font代表的可不是特殊的字体哦。

最后你可能要问了,那字体的大小呢?关于大小(size)接下来就要介绍。

字体大小相关

下面几个参数和大小是相关的:

cexps #专门指字体

先解决上一节字体大小的问题,可以试试ps:

opar<-par(no.readonly = TRUE)x<- seq(-10,10,length.out = 100)y<- log(x^2)par(mfrow=c(3,1))    #设置布局par(ps=10) # 10plot(x,y,type='l')title(main="font size:ps=10",      sub="By program-dog.blogspot.com" #版权信息)par(ps=15) # 15plot(x,y,type='l')title(main="font size:ps=15",      sub="By program-dog.blogspot.com" #版权信息)par(ps=20) # 20plot(x,y,type='l')title(main="font size:ps=20",      sub="By program-dog.blogspot.com" #版权信息)par(opar)

效果图:

不见图,请翻墙

显而易见,ps是控制着所有的字的大小。但是单单指明题目的大小怎么办呢?可以试试cex。

cex的用法也同于上面提到的col和font,几个预设的参数:

cex.axis #坐标轴cex.lab  #标签cex.main #题目cex.sun  #副题目

举例来说:

opar<-par(no.readonly = TRUE)x<- seq(-10,10,length.out = 100)y<- sin(log(x^2))par(mfrow=c(2,1))    #设置布局par(cex.main=1)plot(x,y,type='l')title(main="font size:cex.main=1",      sub="By program-dog.blogspot.com" #版权信息)par(cex.main=1.5)plot(x,y,type='l')title(main="font size:cex.main=1.5",      sub="By program-dog.blogspot.com" #版权信息)par(opar)

效果图:

不见图,请翻墙

仔细观察发现,cex.main=1.5大字体大小都和ps=20的差不多大了,为什么呢?这是因为,ps中的字体大小=“ps*cex”。具体请见这里 。

干巴巴的线条和符号一点都不吸引人的注意力,下面介绍一下和线条和符号相关的几个参数。

线条相关

这个参数可以定制不同的线条:

lty #line style

代码:

opar<-par(no.readonly = TRUE)x<- seq(-10,10,length.out = 100)y<- sin(log(x^2))par(lty=1) #lty 1plot(x,-y,type='l',col="red",ylim=c(-3,3))par(lty=2) #lty 2lines(x,y,type='l',col="blue")title(main="lty",      sub="By program-dog.blogspot.com" #版权信息)par(opar)

效果图:

不见图,请翻墙

lty也是用数字来表示不一样的线条风格,下面是在《R In Action》上弄下来的一张图:

不见图,请翻墙

R In Action
R In Action

符号相关

下面来看看做图时候用到的特殊的符号 pch,先来看代码:

opar<-par(no.readonly = TRUE)x<- seq(-10,10,length.out = 20)y1<- 0.1*x^2y2<- 0.2*x^2y3<- 0.4*x^2y4<- 0.8*x^2y5<- 1.6*x^2y6<- 3.2*x^2par(pch=1) #pch 1plot(x,y1,type='b',col="red",xlim=c(0,5))par(pch=2) #pch 2lines(x,y2,type='b',col="blue")par(pch=3) #pch 3lines(x,y3,type='b',col="green")par(pch=4) #pch 4lines(x,y4,type='b',col="red")par(pch=5) #pch 5lines(x,y5,type='b',col="blue")par(pch=6) #pch 6lines(x,y6,type='b',col="green")title(main="pch",      sub="By program-dog.blogspot.com" #版权信息)par(opar)

效果图

不见图,请翻墙

pch的线条种类如下,图同样摘自《R In Action》:

不见图,请翻墙

线条和符号大小相关

线条的大小可以用lwd调节,符号的大小可以用cex调节,看代码:

opar<-par(no.readonly = TRUE)x <- seq(1,10,length.out = 20)y <- 1/xpar(mfrow=c(2,1))plot(x,y,type="b",pch=2,cex=2,lty=3,lwd=2)title(main="lwd =2  and cex = 2",      sub="By program-dog.blogspot.com" ,#版权信息      cex.sub=0.5)plot(x,y,type="b",pch=2,cex=1,lty=3,lwd=1)title(main="lwd = 1 and cex =1",      sub="By program-dog.blogspot.com" ,#版权信息      cex.sub=0.5)par(opar)

效果图:

不见图,请翻墙

cex上面其实已经介绍过了,不过上面cex用在了par里面,相当于全局变量,会把所有的线条和符号(包括坐标轴,标题等)改变,而这里只是在plot的特定位置做了修饰,改变了局部。

结束

由于篇幅,par的坐标轴,添加图例,组合做图等下一篇再介绍。看到这里,不难发现,R做图的优势在于可配置的参数众多,灵活性极强,同时使人更加专注于做图而非编程,这只是R在数据处理方面众多优势之一。

0 0
原创粉丝点击