[3]R語言在數據處理上的稟賦——par參數詳解(一)

這一篇介紹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) -5
y <- 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) -6
y <- x^2+10
z <- x^2+10
plot(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:10
y<- -(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)接下來就要介紹。

字體大小相關

下面幾個參數和大小是相關的:

cex
ps #專門指字體

先解決上一節字體大小的問題,可以試試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) # 10
plot(x,y,type='l')
title(main="font size:ps=10",
      sub="By program-dog.blogspot.com" #版權信息
)

par(ps=15) # 15
plot(x,y,type='l')
title(main="font size:ps=15",
      sub="By program-dog.blogspot.com" #版權信息
)

par(ps=20) # 20
plot(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 1
plot(x,-y,type='l',col="red",ylim=c(-3,3))
par(lty=2) #lty 2
lines(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^2
y2<- 0.2*x^2
y3<- 0.4*x^2
y4<- 0.8*x^2
y5<- 1.6*x^2
y6<- 3.2*x^2

par(pch=1) #pch 1
plot(x,y1,type='b',col="red",xlim=c(0,5))
par(pch=2) #pch 2
lines(x,y2,type='b',col="blue")
par(pch=3) #pch 3
lines(x,y3,type='b',col="green")
par(pch=4) #pch 4
lines(x,y4,type='b',col="red")
par(pch=5) #pch 5
lines(x,y5,type='b',col="blue")
par(pch=6) #pch 6
lines(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/x

par(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在數據處理方面衆多優勢之一。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章