R語言的圖形參數主要由par()函數控制,圖形佈局主要由layout()函數控制
圖形參數
我們以如下數據爲例
劑量(dose) |
對藥物A的響應(drugA) |
對藥物B的響應(drugB) |
20 |
16 |
15 |
30 |
20 |
18 |
40 |
27 |
25 |
45 |
40 |
31 |
60 |
60 |
40 |
dose <- c(20, 30, 40, 45, 60)
drugA <- c(16, 20, 27, 40, 60)
drugB <- c(15, 18, 25, 31, 40)
# par()函數作用是全局的,使用par()修改過的參數除非會話結束,否則將一直保留,之後畫
# 的圖形將一直使用修改過的參數繪製。
opar <- par(no.readonly=TRUE) # 保存原始的par參數
par(lty=3,pch=8) # 設置線型線寬
plot(dose,drugA,type='b') # 繪製圖形
par(opar) # 將參數恢復爲原始參數
# type='b' 表示同時繪製點和線
# type='p' 表示只繪製點
# type='l' 表示只繪製線
# type='o' 表示繪製的線穿過點
# type='c' 表示只繪製線且空出有點的地方(實際就是b模式把點去掉)
![在這裏插入圖片描述]()
符號和線型線寬
參數 |
描述 |
默認值 |
lty |
線條類型 |
solid(即1) |
lwd |
線條寬度 |
1 |
pch |
設置繪圖點和符號的類型 |
1 |
cex |
控制文字和繪圖符號的大小,cex=1表示正常大小,0.8表示正常大小的80% |
1 |
![參數pch對應的繪圖符號]()
# R中的線型和線寬
plot.new()
plot.window(xlim = c(0, 6), ylim = c(0, 6), ann = F, asp = 1)
int <- 0:5+0.5
abline(h = int, lty = 1:6, lwd = 1:6)
text(1, int, paste(rep("lty = ", 6), 1:6, rep(", lwd = ", 6), 1:6), pos = 3)
![在這裏插入圖片描述]()
plot(dose,drugA,type='b',lty=3,lwd=4,pch=15,cex=3)
#繪製一幅圖形,其線條類型爲點線,寬度爲默認寬度的4倍,點的符號爲實心正方形,大小爲默認符號大小的3倍
![在這裏插入圖片描述]()
顏色
在R中,可以通過顏色下標、顏色名稱、十六進制的顏色值、RGB值或HSV值來指定顏色。舉例來說,col=1、col=“white”、col="#FFFFFF"、col=rgb(1,1,1) 和 col=hsv(0,0,1) 都是表示白色的等價方式.colors()可以返回所有可用的顏色。當需要連續的顏色時,可以使用rainbow()函數來生成。
參數 |
描述 |
默認值 |
col |
默認的繪圖顏色。某些函數(如lines和pie)可以接受一個含有顏色值的向量並自動循環使用。例如,如果設定col=c(“red”, “blue”)並需要繪製三條線,則第一條線將爲紅色,第二條線爲藍色,第三條線又將爲紅色 |
‘black’ |
col.axis |
座標軸刻度文字的顏色 |
‘black’ |
col.lab |
座標軸標籤(名稱)的顏色 |
‘black’ |
col.main |
標題顏色 |
‘black’ |
col.sub |
副標題顏色 |
‘black’ |
fg |
圖形的前景色 |
‘black’ |
bg |
圖形的背景色 |
‘white’ |
mycolors <- rainbow(5) # 參數爲整數,表示要生成的顏色數量
pie(rep(1,5), labels=mycolors, col=mycolors)
mygrays <- gray(0:5/5) # 生成 5階灰度色
pie(rep(1, 5), labels=mygrays, col=mygrays)
![在這裏插入圖片描述]()
![在這裏插入圖片描述]()
文本屬性
控制字號,字體, 字樣
參數 |
描述 |
默認值 |
cex |
控制文字和繪圖符號的大小,cex=1表示正常大小,0.8表示正常大小的80% |
1 |
cex.axis |
座標軸刻度位子的縮放倍數 |
1 |
cex.lab |
座標軸標籤(名稱)的縮放倍數 |
1 |
cex.main |
主標題文字縮放倍數 |
1.2 |
cex.sub |
副標題的縮放倍數 |
1 |
font |
整數。用於指定繪圖使用的字體樣式。1=常規,2=粗體,3=斜體,4=粗斜體,5=符號字體(以Adobe符號編碼表示) |
1 |
font.axis |
座標軸刻度文字的字體樣式 |
1 |
font.lab |
座標軸標籤的字體 |
1 |
font.main |
主標題的字體 |
2 |
font.sub |
副標題的字體樣式 |
1 |
ps |
字體磅值(1磅約爲1/72英寸).文本的最終大小爲 ps*cex |
12 |
family |
繪製文本時使用的字體族。標準的取值爲serif(襯線)、sans(無襯線)和mono(等寬) |
‘’ |
plot(dose,drugA,type='b',font.lab=2, cex.lab=1.5) # 座標軸標籤字體斜體且放大1.5倍
text(dose-1,drugA+1,drugA,cex=0.8, font=4) # 添加文本
![在這裏插入圖片描述]()
圖形尺寸和邊界尺寸
參數 |
描述 |
默認值 |
pin |
數值型向量c(寬,高),以英寸表示的圖形尺寸 |
(5.4,4.8) |
mai |
數值型向量 c(底部,左側,上方,右側),設置圖形邊距大小,單位英寸 |
c(1,0.8,0.8,0.4)+0.02 |
mar |
數值型向量 c(底部,左側,上方,右側),設置圖形邊距大小,單位英分 |
c(5, 4, 4, 2) + 0.1 |
opar <- par(no.readonly=TRUE)
par(pin=c(2, 3),mfcol=c(1,2))
par(lwd=2, cex=1.5)
par(cex.axis=.75, font.axis=3)
plot(dose, drugA, type="b", pch=19, lty=2, col="red")
plot(dose, drugB, type="b", pch=23, lty=6, col="blue", bg="green")
par(opar)
![在這裏插入圖片描述]()
添加文本,自定義座標軸和圖例
參數 |
描述 |
默認值 |
ann |
控制高水平繪圖函數的主標題和座標軸標題註釋,若ann=FALSE,將不顯示這些註釋 |
TRUE |
side |
一個整數,表示在圖形的哪邊繪製座標軸(1=下,2=左,3=上,4=右) |
|
at |
一個數值型向量,表示需要繪製刻度線的位置 |
|
labels |
一個字符型向量,表示置於刻度線旁邊的文字標籤(如果爲NULL,則將直接使用at中的值 |
|
pos |
座標軸線繪製位置的座標(即與另一條座標軸相交位置的值) |
|
las |
標籤是否平行於(=0)或垂直於(=2)座標軸 |
0 |
tck |
刻度線的長度,以相對於繪圖區域大小的分數表示(負值表示在圖形外側,正值表示在圖形內側,0表示禁用刻度,1表示繪製網格線);默認值爲-0.01) |
|
xaxt |
設置x軸類型,xaxt=“n” 表示沒有座標軸,取其它值都會畫出座標軸 |
s |
yaxt |
設置y軸類型,同上 |
s |
plot(dose, drugA, type="b",
col="red", lty=2, pch=2, lwd=2,
main="Clinical Trials for Drug A", # 主標題
sub="This is hypothetical data", # 副標題
xlab="Dosage", ylab="Drug Response", # x,y軸標籤
xlim=c(0, 60), ylim=c(0, 70)) # x,y軸的範圍
![在這裏插入圖片描述]()
在高級繪圖函數中,都是自帶座標軸標題等屬性的。如果想自定義,就要使用ann=FALSE 來禁用座標軸註釋
x <- c(1:10)
y <- x
z <- 10/x
opar <- par(no.readonly=TRUE)
par(mar=c(5, 4, 4, 8) + 0.1) # 設置邊界大小
plot(x, y, type="b",
pch=21, col="red", # 設置符號類型及線顏色
yaxt="n", lty=3, ann=FALSE) # 關閉座標軸及座標軸註釋
lines(x, z, type="b", pch=22, col="blue", lty=2) # 繪製 z線
axis(2, at=x, labels=x, col.axis="red", las=2) # 繪製自定義x 軸
axis(4, at=z, labels=round(z, digits=2), # 繪製自定義y軸
col.axis="blue", las=2, cex.axis=0.7, tck=-.01)
mtext("y=1/x", side=4, line=3, cex.lab=1, las=2, col="blue") #座標軸標籤
title("An Example of Creative Axes", # 標題
xlab="X values",
ylab="Y=X")
par(opar)
![在這裏插入圖片描述]()
# 參考線
abline(h=c(1,2,3), v=(4,5,6))
# 在y軸1,2,3處,x軸4,5,6處添加參考線
# 圖例
legend(location,title,legend....)
參數 |
描述 |
location |
有許多方式可以指定圖例的位置。你可以直接給定圖例左上角的x、y座標,也可以執行locator(1),然後通過鼠標單擊給出圖例的位置,還可以使用關鍵字bottom、bottomleft、left、topleft、top、topright、right、bottomright或center放置圖例。如果你使用了以上某個關鍵字,那麼可以同時使用參數inset=指定圖例向圖形內側移動的大小(以繪圖區域大小的分數表示) |
title |
圖例標題的字符串(可選) |
legend |
圖例標籤組成的字符型向量 |
… |
其他選項。如果圖例標示的是顏色不同的線條,需要指定col=加上顏色值組成的向量。如果圖例標示的是符號不同的點,則需指定pch=加上符號的代碼組成的向量。如果圖例標示的是不同的線條寬度或線條類型,請使用lwd=或lty=加上寬度值或類型值組成的向量。要爲圖例創建顏色填充的盒形(常見於條形圖、箱線圖或餅圖),需要使用參數fill=加上顏色值組成的向量 |
dose <- c(20, 30, 40, 45, 60)
drugA <- c(16, 20, 27, 40, 60)
drugB <- c(15, 18, 25, 31, 40) # 輸入數據
opar <- par(no.readonly=TRUE) # 保存原始參數
par(lwd=2, cex=1.5, font.lab=2) # 設置線寬, 放大1.5倍, 座標軸標籤字體 粗體
plot(dose, drugA, type="b",
pch=15, lty=1, col="red", ylim=c(0, 60), # 設置符號類型,線型, 顏色, y軸取值範圍
main="Drug A vs. Drug B", # 主標題
xlab="Drug Dosage", ylab="Drug Response")
text(dose-1, drugA+1.8, drugA, col='red',cex=0.5,font=2) # 添加文本
text(dose, drugB-2, drugB, col='blue',cex=0.5,font=2) # 添加文本
lines(dose, drugB, type="b",
pch=17, lty=2, col="blue")
abline(h=c(30), lwd=1.5, lty=2, col="gray") # 參考線
library(Hmisc) # 載入包
minor.tick(nx=3, ny=3, tick.ratio=0.5) # 添加次要刻度線
legend("topleft", inset=.05, title="Drug Type", c("A","B"), # 圖例
lty=c(1, 2), pch=c(15, 17), col=c("red", "blue"))
par(opar)
![在這裏插入圖片描述]()
text()可向繪圖區域內部添加文本,而mtext()則向圖形的四個邊界之一添加文本。
參數 |
描述 |
location |
文本的位置參數。可爲一對x,y座標,也可通過指定location爲locator(1)使用鼠標交互式地確定擺放位置 |
pos |
文本相對於位置參數的方位。1=下,2=左,3=上,4=右。如果指定了pos,就可以同時指定參數offset=作爲偏移量,以相對於單個字符寬度的比例表示 |
side |
指定用來放置文本的邊。1=下,2=左,3=上,4=右。你可以指定參數line=來內移或外移文本,隨着值的增加,文本將外移。也可使用adj=0將文本向左下對齊,或使用adj=1右上對齊 |
text(lacation, “text”, pos,…)
mtext(“text”, side, line=n,…)
圖形佈局
使用layout()函數可以很容易的繪製出不同佈局的拼圖。
layout(mat,widthhs=rep.int(1,ncol(mat)), height=rep.int(1,nrow(mat)), respect=FALSE)
參數 |
描述 |
mat |
矩陣,描述繪圖環境,比如matrix(c(1,2,3,3),nrow=2,ncol=2,byrow=TRUE)表示見繪圖區域分割成2行2列,按列填充。第三張圖佔據整個第二行,前兩張圖平分第一行 |
widths |
向量,分割區域寬度,widths=(2,1)表示繪圖區寬度按照2:1劃分 |
heights |
向量,分割區域高度,heights=(3,1)表示繪圖區高度按照3:1劃分 |
# 在par()函數中使用圖形參數 mfrow=c(nrows, ncols)來創建按行填充的、行數爲nrows、列數爲ncols的圖形矩陣。
# nfcol=c(nrows, ncols)按列填充矩陣
attach(mtcars)
opar <- par(no.readonly=TRUE)
par(mfrow=c(2,2))
plot(wt,mpg, main="Scatterplot of wt vs. mpg")
plot(wt,disp, main="Scatterplot of wt vs. disp")
hist(wt, main="Histogram of wt")
boxplot(wt, main="Boxplot of wt")
par(opar)
detach(mtcars)
![在這裏插入圖片描述]()
# layout()函數
layout(matrix(c(1,2,3,3), nrow=2, ncol=2), widths=c(2,1)) # 設置佈局 2行2列 默認列填充, 第三幅圖佔據3,4號位,且寬度是1,2的1/2
opar <- par(no.readonly=TRUE)
par(mai=c(0.6,0.6,0.1,0.1),cex=0.7) # 設置圖形邊距及縮放0.7
x <- rnorm(5000) # 生成5000個標準正態分佈的隨機數
y <- rchisq(5000, 10) # 生成5000個卡方分佈的隨機數
hist(x, prob=TRUE, col='lightblue', # x 的直方圖,
xlab='x', ylab='Density', # 設置座標軸註釋
ylim=c(0,0.4),main="") # 設置y軸範圍,禁用主標題
hist(y, freq=FALSE, col='pink', xlab="y", ylab='Density', main="")
boxplot(x, col='red', lwd=1)
par(opar)
![在這裏插入圖片描述]()
attach(mtcars)
layout(matrix(c(1, 1, 2, 3), 2, 2, byrow = TRUE),
widths=c(3, 1), heights=c(1, 2)) # 第二行高度是第一行的2倍,第三幅圖的寬度是第二幅圖的 1/3
hist(wt)
hist(mpg)
hist(disp)
detach(mtcars)
![在這裏插入圖片描述]()
# 更精細的控制圖形,可以使多張圖組合成一張有實際意義的圖形
# 利用 fig= 參數來精確的控制繪圖,參數fig=的取值是一個形如c(x1, x2, y1, y2)的數值向量
# 想想繪圖區域是一個寬爲 1 ,高爲 1 的矩形,則x1, x2, y1, y2的範圍就是[0,1]
# fig= 默認 會新建一幅圖形,所以在添加一幅圖到一幅現有圖形上時,請設定參數new=TRUE。
opar <- par(no.readonly=TRUE)
par(fig=c(0, 0.8, 0, 0.8)) # 設置散點圖範圍
plot(mtcars$mpg, mtcars$wt, # 散點圖
xlab="Miles Per Gallon",
ylab="Car Weight")
par(fig=c(0, 0.8, 0.5, 1), new=TRUE) # 設置上方箱線圖範圍,寬於散點圖一致,高度範圍在0.5-1,。
boxplot(mtcars$mpg, horizontal=TRUE, axes=FALSE) # 上方添加箱線圖, 禁用座標軸
par(fig=c(0.6, 1, 0, 0.8), new=TRUE) # 設置右邊箱線圖,高度與散點圖一直,寬度範圍在0.6-1.
boxplot(mtcars$wt, axes=FALSE) # 右邊添加箱線圖,禁用座標軸
mtext("Enhanced Scatterplot", side=3, outer=TRUE, line=-3)
par(opar)
![在這裏插入圖片描述]()