統(tǒng)計分析與可視化是R語言最強的兩個點。本節(jié)簡要介紹一些R基礎繪圖中的參數(shù)。
R圖形可設置的參數(shù)很多,大概可以分為以下幾大部分:
- 圖像的保存。不同類型的保存大致步驟相同,如保存為pdf文件
pdf(filename);plot(畫圖過程);dev.off()
,當然也可以通過rstudio里面的選項直接導出圖片; - 圖像的全局參數(shù)設置。 圖形的參數(shù)如線條、性狀、坐標軸等都可以通過函數(shù)
par()
設置,如opar<-par(no.readonly=TRUE);par(lty=2);plot(畫圖過程);par(opar)
,參數(shù)no.readonly=TRUE
可以生成一個可以修改的當前圖形參數(shù)列表。。當然這些參數(shù)除了在全局函數(shù)par()
中進行設置,也可以在繪圖過程中進行設置。圖形參數(shù)主要包括:符號、線條、顏色、文本參數(shù)、圖形尺寸及邊界等; - 添加文本,自定義坐標軸和圖例。標題和坐標軸名稱主要通過
title()
函數(shù)進行設置,坐標軸細節(jié)(如范圍、顏色、標簽等)主要通過axis()
函數(shù)進行設置,次坐標軸可通過Hmisc包進行設置,圖例可通過legend
進行設置; - 文本標注。添加文本主要是通過
text()
和mtext()
函數(shù)進行設置,數(shù)學標注可使用plotmath()
; - 圖形組合。圖形組合有三種設置方式:(1)
par()
函數(shù)通過設置mfrow
或mfcol
將畫布進行分割;(2)layout()
函數(shù)也可以對畫布進行分割;(3)若需要更為精細的對圖形布局進行控制,則需要使用到par()
中的fig
參數(shù)。
下面詳細的介紹這些參數(shù)。
1、圖形參數(shù)
1.1 符號和線條
參數(shù) | 描述 |
---|---|
pch | 點的符號 |
cex | 指定符號大小,表示與默認的相對大小,如1.5表示為默認的1.5倍 |
lty | 線條類型 |
lwd | 線條寬度,同樣以默認值的相對大小來表示,如2表示為默認大小的2倍 |
pch
符號代碼如下圖:
lty
可指定的線條類型如下:
1.2 顏色
在R中可以通過顏色名稱、RGB、顏色值等多種方式來指定顏色。函數(shù)colors可返回所有可用顏色名稱。此外,rainbow()
、heat.colors()
等多種函數(shù)可以指定連續(xù)顏色。用于指定顏色的參數(shù)如下表:
參數(shù) | 描述 |
---|---|
col | 默認的繪圖顏色 |
col.axis | 坐標軸刻度文字(標簽)的顏色 |
col.lab | 坐標軸名稱的顏色 |
col.main | 主標題的名稱 |
col.sub | 副標題的名稱 |
fg | 前景色 |
bg | 背景色 |
1.3 文本屬性
文本屬性主要包括字體大小、樣式等。指定文本大小參數(shù)如下表所示:
參數(shù) | 描述 |
---|---|
cex | 相對于默認的放大縮小倍數(shù) |
cex.axis | 坐標軸刻度的放大縮小倍數(shù) |
cex.lab | 坐標軸名稱放大縮小倍數(shù) |
cex.main | 圖片標題放大縮小倍數(shù) |
cex.sub | 圖片副標題放大縮小倍數(shù) |
指定文字樣式的參數(shù),如par(font.lab=3, cex.lab=1.5, font.main=4, cex.main=2)
:
參數(shù) | 描述 |
---|---|
font | 指定字體樣式,1=常規(guī),2=粗體,3=斜體,4=粗斜體,5=符號字體(以Adobe 符號編碼表示) |
font.axis | 坐標刻度標簽的字體樣式 |
font.lab | 坐標軸名稱的字體樣式 |
font.main | 標題的樣式 |
font.sub | 副標題的樣式 |
ps | 字體磅值,最終大小為ps*cex |
family | 繪制文本時使用的字體族。標準的取值為serif(襯線)、sans(無襯線)和mono(等寬) |
1.4 圖形尺寸與邊界
使用下面的參數(shù)可以控制圖形尺寸和邊界大小,如par(pin=c(4, 3), mai=c(1, 0.5, 1, 0.2))
:
參數(shù) | 描述 |
---|---|
pin | 以英寸表示圖形的圖形尺寸 |
mai | 以數(shù)值向量表示的邊界大小,順序為下左右上,單位為英寸 |
mar | 以數(shù)值向量表示邊界大小,順序為下左上右,單位為英分。默認值為c(5,4,4,2)+0.1 |
2、添加文本、自定義坐標軸和圖例
許多高級函數(shù)(如plot、hist、boxplot等)包含了默認的設置標題和坐標軸標簽,若想另行設置需在高級函數(shù)或par()
中設置anno=FALSE
來移除他們。
2.1 標題
使用title()
函數(shù)可以對主標題、副標題、坐標軸標題進行設置,包括標題文本顏色大小等。如:
title(main='my title', sub='my subtitle', xlab='my xlab', ylab='my ylab', col.lab='blue', cex.lab=0.75)
2.2 坐標軸
使用axis()
來創(chuàng)建自定義的坐標軸,而非R的默認坐標軸,格式為:axis(side, at=,labels=,pos=,lty=,col=,las=,tck=,...)
。
參數(shù) | 描述 |
---|---|
side | 設置在圖形哪邊繪制坐標軸(1=下,2=左,3=上,4=右) |
at | 數(shù)值型向量,表示繪制坐標軸刻度的位置 |
labels | 刻度線標簽,默認為at中的值 |
pos | 兩坐標軸相交的位置 |
lty | 線條類型 |
col | 線條和刻度線顏色 |
las | 刻度線標簽平行(=0)還是垂直(=2)于坐標軸 |
tck | 刻度線的長度,以相對于繪圖區(qū)域大小的分數(shù)表示(負值表示在圖形外側(cè),正值表示在圖形內(nèi)側(cè), 0表示禁用刻度, 1表示繪制網(wǎng)格線);默認值為-0.01 |
需要注意的是,創(chuàng)建自定義坐標軸時,應當禁用高級繪圖函數(shù)自動生成的坐標軸。參數(shù)axes=FALSE
將禁用全部坐標軸(包括坐標軸框架線,除非你添加了參數(shù)frame.plot=TRUE)。參數(shù)xaxt="n"
和yaxt="n"
將分別禁用X軸或Y軸(會留下框架線,只是去除了刻度)。
若需要繪制次要刻度線,則需要用到Hmisc包的minor.tick()
函數(shù)。
2.3 參考線
函數(shù)abline()
可以用來為圖形添加參考線。
###在y=1,2,3處設置水平參考線
abline(h=c(1,2,3))
###在x=1,2,3處設置豎直參考線
abline(v=c(1,2,3), lty=2, col=''blue)
2.4 圖例
使用legend可以為我們的圖形添加圖例,legend(location, title, legend)
.
參數(shù) | 描述 |
---|---|
location | 有許多方式可以指定圖例的位置。你可以直接給定圖例左上角的x、 y坐標,也可以執(zhí)行l(wèi)ocator(1),然后通過鼠標單擊給出圖例的位置,還可以使用關鍵字bottom、 bottomleft、left、 topleft、 top、 topright、 right、 bottomright或center放置圖例。如果你使用了以上某個關鍵字,那么可以同時使用參數(shù)inset=指定圖例向圖形內(nèi)側(cè)移動的大小(以繪圖區(qū)域大小的分數(shù)表示) |
title | 圖例標題(可選) |
legend | 圖例標簽組成的字符型向量 |
... | 其他選項。如果圖例標示的是顏色不同的線條,需要指定col=加上顏色值組成的向量。如果圖例標示的是符號不同的點,則需指定pch=加上符號的代碼組成的向量。如果圖例標示的是不同的線條寬度或線條類型,請使用lwd=或lty=加上寬度值或類型值組成的向量。要為圖例創(chuàng)建顏色填充的盒形(常見于條形圖、箱線圖或餅圖),需要使用參數(shù)fill=加上顏色 |
其他常用的圖例選項包括用于指定盒子樣式的bty
、指定背景色的bg
、指定大小的cex
,以及指定文本顏色的text.col
。指定horiz=TRUE
將會水平放置圖例,而不是垂直放置。
2.5 文本標注
圖形的文本標注主要使用text()
,mtext()
。
text(location, 'text', pos, ...)
mtext('text', side, line=n, ...)
參數(shù) | 描述 |
---|---|
location | 文本的位置參數(shù)。可為一對x,y坐標,也可通過指定location為locator(1)使用鼠標交互式地確定擺放位置 |
pos | 文本相對于位置參數(shù)的方位。1=下,2=左,3=上,4=右。如果指定了pos,就可以同時指定參數(shù)offset=作為偏移量,以相對于單個字符寬度的比例表示 |
side | 指定用來放置文本的邊。 1=下, 2=左, 3=上, 4=右。你可以指定參數(shù)line=來內(nèi)移或外移文本,隨著值的增加,文本將外移。也可使用adj=0將文本向左下對齊,或使用adj=1右上對齊 |
對于數(shù)學標注,可以使用plotmath()
函數(shù)。
3、圖形組合
R圖形組合有三種方法par(mfrow=...)
、layout()
、par(fig=...)
。
3.1 par(mfrow=...)
使用par()
中的mfrow=c(nrows, ncols)
或mfcol=c(nrows, ncols)
可以快速創(chuàng)建nrows行ncols列的圖形矩陣。
opar <- par(no.readonly=TRUE)
par(mfrow=c(2,2)) #將圖形分為2行2列
plot(...) #繪制第一個圖
plot(...) #第二
plot(...) #第三
plot(...) #繪制最后一個圖
par(opar)
3.2 layout()
函數(shù)layout()
的調(diào)用形式為layout(mat)
,其中的mat是一個矩陣,它指定了所要組合的多個圖形的所在位置。
attach(mtcars)
###將畫布分為三部分,第一部分為一行,另兩部分平分另一行
layout(matrix(c(1,1,2,3), 2,2, byrow=TRUE))
hist(mpg) #第一個圖獨占第一行
hist(gear) #第二個圖位于第二行左半部
hist(disp) #第三個圖位于第二行右半部
detach(mtcars)
為了更精確地控制每幅圖形的大小,可以有選擇地在layout()函數(shù)中使用widths=和heights=兩個參數(shù)。其形式為:widths = 各列寬度值組成的一個向量, heights = 各行高度值組成的一個向量。widths和heights中的向量數(shù)值都可以通過相對值指定。
layout()函數(shù)能夠讓我們輕松地控制最終圖形中的子圖數(shù)量和擺放方式,以及這些子圖的相對大小。
attach(mtcars)
###同樣將圖分為3部分,只是第這三部分所占比例各不相同
layout(matrix(c(1,1,2,3),2,2,byrow=TRUE), widths=c(3,1), heights=c(1,2))
hist(mpg) # 第一個圖獨占一行,高度占總高度1/3(heights=c(1,2))
hist(gear) # 第二個圖在第二行左邊,高度占總高度2/3, 寬度占行寬的3/4(widths=c(3,1))
hist(disp) # 第三個圖在二行右邊,高度占總高度2/3, 寬度占行寬的1/4(widths=c(3,1))
detach(mtcars)
3.3 par(fig=....) 圖形的精確控制
fig
參數(shù)使我們能夠精確的排布各個圖形的位置,將各個圖形進行疊加。
> opar<-par(no.readonly = T)
###設置第一幅圖的位置, X和Y軸范圍都為(0,0.8)
> par(fig=c(0,0.8,0,0.8))
> plot(mtcars$wt, mtcars$mpg, xlab='MPG', ylab='Weight')
### 設置第二幅圖,X軸范圍為(0,0.8),Y軸范圍為(0.55, 1)
> par(fig=c(0,0.8,0.55, 1), new=T) #注意這里的new參數(shù)一定要設置
> boxplot(mtcars$wt,horizontal = T,axes=F) #axes=F, 這里將所有的箱線圖的坐標軸取消了
###設置第三幅圖的位置,X軸范圍為(0.65, 1),Y軸范圍(0,0.8)
> par(fig=c(0.65, 1, 0, 0.8), new=T)
> boxplot(mtcars$mpg,axes=F)
###在上方添加文本
> mtext("Enhanced scatterplot", side=3,outer=T,line=-3)
###添加標題,看圖可以知道這時標題并非整個圖的標題,而是第三幅圖的標題
> title(main="hellow world!")
要理解這幅圖的繪制原理,請試想完整的繪圖區(qū)域:左下角坐標為(0,0),而右上角坐標為(1,1)。下圖是一幅示意圖。參數(shù)fig=的取值是一個形如c(x1, x2, y1, y2)的數(shù)值向量。
另外值得注意的是,各獨立子圖所需空間的大小可能與設備相關。如果遇了“Error in plot.new(): figure margins too large”這樣的錯誤,嘗試在整個圖形的范圍內(nèi)修改各個子圖占據(jù)的區(qū)域位置和大小。