R語言各個圖形參數(shù)設置及其意義

統(tǒng)計分析與可視化是R語言最強的兩個點。本節(jié)簡要介紹一些R基礎繪圖中的參數(shù)。
R圖形可設置的參數(shù)很多,大概可以分為以下幾大部分:

  1. 圖像的保存。不同類型的保存大致步驟相同,如保存為pdf文件pdf(filename);plot(畫圖過程);dev.off(),當然也可以通過rstudio里面的選項直接導出圖片;
  2. 圖像的全局參數(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ù)、圖形尺寸及邊界等;
  3. 添加文本,自定義坐標軸和圖例。標題和坐標軸名稱主要通過title()函數(shù)進行設置,坐標軸細節(jié)(如范圍、顏色、標簽等)主要通過axis()函數(shù)進行設置,次坐標軸可通過Hmisc包進行設置,圖例可通過legend進行設置;
  4. 文本標注。添加文本主要是通過text()mtext()函數(shù)進行設置,數(shù)學標注可使用plotmath();
  5. 圖形組合。圖形組合有三種設置方式:(1)par()函數(shù)通過設置mfrowmfcol將畫布進行分割;(2)layout()函數(shù)也可以對畫布進行分割;(3)若需要更為精細的對圖形布局進行控制,則需要使用到par()中的fig參數(shù)。

下面詳細的介紹這些參數(shù)。

1、圖形參數(shù)

1.1 符號和線條
參數(shù) 描述
pch 點的符號
cex 指定符號大小,表示與默認的相對大小,如1.5表示為默認的1.5倍
lty 線條類型
lwd 線條寬度,同樣以默認值的相對大小來表示,如2表示為默認大小的2倍

pch符號代碼如下圖:

image

lty可指定的線條類型如下:

image
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!")

image

要理解這幅圖的繪制原理,請試想完整的繪圖區(qū)域:左下角坐標為(0,0),而右上角坐標為(1,1)。下圖是一幅示意圖。參數(shù)fig=的取值是一個形如c(x1, x2, y1, y2)的數(shù)值向量。

image

另外值得注意的是,各獨立子圖所需空間的大小可能與設備相關。如果遇了“Error in plot.new(): figure margins too large”這樣的錯誤,嘗試在整個圖形的范圍內(nèi)修改各個子圖占據(jù)的區(qū)域位置和大小。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 230,825評論 6 546
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 99,814評論 3 429
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 178,980評論 0 384
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經(jīng)常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 64,064評論 1 319
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 72,779評論 6 414
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 56,109評論 1 330
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 44,099評論 3 450
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 43,287評論 0 291
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 49,799評論 1 338
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 41,515評論 3 361
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,750評論 1 375
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 39,221評論 5 365
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 44,933評論 3 351
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 35,327評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,667評論 1 296
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 52,492評論 3 400
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,703評論 2 380

推薦閱讀更多精彩內(nèi)容

  • 參考書:《Numerical Ecology with R》-Daniel Borcard -F-P 1、基礎函數(shù)...
    ximoos閱讀 2,753評論 0 6
  • 3.1 使用圖形 使用代碼保存圖形:保存為PDF—pdf(filename),其它格式:win.metafile(...
    壹亮3278閱讀 2,569評論 0 53
  • 圖形初步 在本章中,我們將討論處理圖形的一般方法。我們首先探討如何創(chuàng)建和保存圖形,然后關注如何修改那些存在于所有圖...
    jplee閱讀 5,051評論 0 12
  • 20171122(從有道遷移) 圖形初階 圖形參數(shù)圖形參數(shù)的選項來自定義一幅圖形的多個特征(字體、顏色、坐標軸、標...
    KrisKC閱讀 412評論 0 0
  • 1.感恩早上了,我還活著,謝謝!謝謝!謝謝! 2.感恩廁所為我服務,我能順暢地排泄,謝謝!謝謝!謝謝! 3.感恩我...
    曉月_33e6閱讀 317評論 0 0