R語言作圖:坐標軸的設置方式
要繪制一張賞心悅目的統計圖表,坐標軸的設置至關重要。在R語言底層作圖中,對坐標軸的調整主要通過調整plot函數、axis函數和title函數的一系列參數完成。
plot(x,y, ...) axis(side,at = NULL, labels = TRUE, tick = TRUE, line = NA, pos= NA, outer = FALSE, font = NA, lty = "solid", lwd = 1, lwd.ticks = lwd, col = NULL,col.ticks = NULL, hadj = NA, padj = NA, ...) title(main= NULL, sub = NULL, xlab = NULL, ylab = NULL, line = NA, outer = FALSE, ...)
一、plot函數的準備
在個性化設置坐標軸之前中,通常需調整plot函數中的ann、bty、xaxt、yaxt、xaxs和yaxs參數:
ann取FALSE時將不會畫出標題(包括主、副標題及坐標軸標題);
bty用來設置邊框形式,默認值為”o”,表示四面邊框都畫出,其餘可選值包括”l”(左下)、”7″(上右)、”c”(上下左)、”u”(左下右)、”]” (上下右)和”n”(無,即不畫邊框),在很多個性化繪圖中,bty設為”n”,後期的邊框線再使用其他函數(如axis)自行添加;
xaxs和yaxs 用來設置x軸和y軸的范圍,默認值取“r”,表示坐標軸比給定作圖范圍(參數xlim和ylim給出的范圍)稍微大一點兒,取”i”時表示坐標軸范圍與給定作圖范圍完全相同,另外還可取”s”、”e”、”d”;
xaxt和yaxt 取”n”時,坐標軸、刻度線以及刻度值將不會畫出。
x <- seq(-4, 4, 0.01) y <- x^2 par(mfrow = c(2, 2), mar = c(4, 4, 1, 1)) plot(x, y) # 未作處理 plot(x, y, xaxs = "i", yaxs ="i") # 繪圖邊框未留白 plot(x, y, bty = 'l') # 隻保留左和下兩條邊框 plot(x, y, ann = F, bty = "n", xaxt = "n", yaxt ="n") # 邊框、坐標軸都去掉
二、axis函數的用法
1、基本操作
side表示要操作的坐標軸,取值1、2、3、4分別代表下、左、上、右;
at表示刻度線及刻度值所在位置;
labels表示刻度值;
las表示坐標刻度值文字方向,las=0表示文字方向與坐標軸平行,1表示始終為水平方向,2表示與坐標軸垂直,3表示終為垂直方向。
x<- seq(-4, 4, 0.01) y<- x^2 par(mfrow=c(1, 2), mar = c(4, 4, 1, 1)) #未設置文字方向 plot(x,y, ann = F, xaxt = "n", yaxt = "n") axis(1,-4:4, -4:4) axis(2,seq(0, 16, 4), seq(0, 16, 4)) #文字方向水平 plot(x,y, ann = F, xaxt = "n", yaxt = "n") axis(1,-4:4, -4:4, las = 1) axis(2,seq(0, 16, 4), seq(0, 16, 4), las = 1)
2、字體字號
cex.axis表示坐標軸刻度值的字號大小,
font.axis表示坐標軸刻度值的字體,font=1表示正體,2表示黑體,3表示斜體,4表示黑斜體。
x<- seq(-4, 4, 0.01) y<- x^2 par(mfrow=c(2, 2), mar = c(4, 4, 1, 1)) #未設置字體字號 plot(x,y, ann = F, xaxt = "n", yaxt = "n") axis(1,-4:4, -4:4) #cex.axis = 2 plot(x,y, ann = F, xaxt = "n", yaxt = "n") axis(1,-4:4, -4:4, cex.axis = 2) #font.axis = 2 plot(x,y, ann = F, xaxt = "n", yaxt = "n") axis(1,-4:4, -4:4, font.axis = 2) #font.axis = 3 plot(x,y, ann = F, xaxt = "n", yaxt = "n") axis(1,-4:4, -4:4, font.axis = 3)
3、顏色
col表示圖的顏色,用在axis函數中表示坐標軸線和坐標刻度線的顏色;
col.axis表示坐標軸刻度值的顏色;
col.ticks表示坐標軸刻度線的顏色。
x<- seq(-4, 4, 0.01) y<- x^2 par(mfrow=c(2, 2), mar = c(4, 4, 1, 1)) #未設置顏色 plot(x,y, ann = F, bty = "n", xaxt = "n", yaxt = "n") axis(1,-4:4, -4:4) #col = 2 plot(x,y, ann = F, bty = "n", xaxt = "n", yaxt = "n") axis(1,-4:4, -4:4, col = 2) #col.axis = 2 plot(x,y, ann = F, bty = "n", xaxt = "n", yaxt = "n") axis(1,-4:4, -4:4, col.axis = 2) #col.ticks = 2 plot(x,y, ann = F, bty = "n", xaxt = "n", yaxt = "n") axis(1,-4:4, -4:4, col.ticks = 2)
4、位置
line表示坐標軸線位置與圖像邊框的距離,取負數時會畫在圖像邊框以內;
mgp默認值為c(3, 1, 0),三個數字分別代表坐標軸標題、刻度值和軸線與繪圖邊框的距離;
tcl默認值為-0.5,數值表示刻度線長度,負值表示刻度線朝外,正值朝裡;
pos 表示軸線所在的位置;
line.outer取TRUE時,坐標軸將畫在畫佈邊緣處;
hadj指將刻度值沿平行坐標軸方向調整的距離;
padj指將刻度值沿垂直坐標軸方向調整的距離。
x <- seq(-4, 4, 0.01) y <- x^2 par(mfrow= c(2, 2), mar = c(4, 4, 1, 1)) # 未設置刻度值位置 plot(x, y, ann = F, xaxt = "n", yaxt ="n") axis(1, -4:4, -4:4) # 使用line調整刻度值位置 plot(x, y, ann = F, xaxt = "n", yaxt ="n") axis(1, -4:4, -4:4, line = 2) # 使用mgp調整刻度值位置 plot(x, y, ann = F, xaxt = "n", yaxt ="n") axis(1, -4:4, -4:4, mgp = c(3, 2, 0)) # 使用padj調整刻度值位置 plot(x, y, ann = F, xaxt = "n", yaxt ="n") axis(1, -4:4, -4:4, padj = 1)
5、其他
tick取FALSE時,坐標軸線和刻度線不畫出;
lty表示線型,用在axis函數中表示坐標軸線型;
lwd表示線的粗細,用在axis函數中表示坐標軸線粗細;
lwd.ticks表示刻度線粗細。
三、title函數的用法
main、sub、xlab和ylab分別表示主標題、副標題、x軸標題和y軸標題;
cex.lab表示坐標軸標題的字號大小;
font.lab表示坐標軸標題的字體;
col.lab表示坐標軸標題的顏色;
其餘參數和axis中用法一致。
x<- seq(-4, 4, 0.01) y<- x^2 par(mfrow=c(2, 2), mar = c(4, 4, 1, 1)) #無標題 plot(x,y, ann = F, xaxt = "n", yaxt = "n") axis(1,-4:4, -4:4) axis(2,seq(0, 16, 4), seq(0, 16, 4)) #使用title設置標題 plot(x,y, ann = F, xaxt = "n", yaxt = "n") axis(1,-4:4, -4:4, las = 1) axis(2,seq(0, 16, 4), seq(0, 16, 4), las = 1) title(xlab= 'x', ylab = 'y') #使用line調整位置 plot(x,y, ann = F, xaxt = "n", yaxt = "n") axis(1,-4:4, -4:4, las = 1) axis(2,seq(0, 16, 4), seq(0, 16, 4), las = 1) title(xlab= 'x', ylab = 'y', line = 2) #調整顏色字體字號 plot(x,y, ann = F, xaxt = "n", yaxt = "n") axis(1,-4:4, -4:4, las = 1) axis(2,seq(0, 16, 4), seq(0, 16, 4), las = 1) title(xlab= 'x', ylab = 'y', col.lab = 2, font.lab = 4, cex.lab = 2)
四、刻度間隔
plot函數會自動給出比較合理的刻度間隔,本質上是調用瞭pretty函數。
pretty(x, n = 5, min.n = n %/% 3, shrink.sml = 0.75, high.u.bias = 1.5, u5.bias = .5 + 1.5*high.u.bias, eps.correct = 0, ...)
x是一個序列,pretty函數會先對x取一個range,然後等分為大約n+1個間隔。
如果在作圖時對系統自動給出的間隔不滿意,可以調整n的值,用pretty函數自定義合適的間隔。
以上為個人經驗,希望能給大傢一個參考,也希望大傢多多支持WalkonNet。如有錯誤或未考慮完全的地方,望不吝賜教。