在R語言中,par 函數可以設置圖形邊距,其中oma 參數設置outer margin, mar 參數設置margin,
這些邊距有什么不同呢,通過box函數可以直觀的看到
box 默認在當前圖形繪制邊框,第一個參數which = "plot", 所以在當前圖形上繪制邊框
which 的值除了plot 之外,還可以選擇 figure, inner, outer
接下來分別用不同的值測試一下,為了區分,為不同的邊框設置不同的顏色和類型,代碼如下:
attach(mtcars)
plot(wt, mpg)
abline(lm(mpg~wt))
title("Regression of MPG on Weight")
box(which = "plot", col = "red", lwd = 2)
box(which = "figure",col = "blue", lwd = 4)
為了區分,plot的邊框為 紅色, figure 的邊框為 藍色,效果如下:
可以看出,在figure 區域中包含了plot 區域, plot 區域指的是實際繪圖中的坐標系內的區域,里面是坐標系中的點,線等元素,而在figure 和 plot 區域之間的是坐標軸的刻度,x軸和y中的標簽,title 等元素
在紅色的邊框和藍色的邊框之間的區域就是inner margin, 如果inner margin 太窄會發生什么,用一個實際的例子看一下
par(oma=c(1,1,1,1), mar=c(2,2,2,2)) attach(mtcars) plot(wt, mpg) abline(lm(mpg~wt)) title("Regression of MPG on Weight") box(which = "plot", col = "red", lwd = 2) box(which = "figure",col = "blue", lwd = 4)
效果如下:
可以看到,坐標軸對應的標題沒有了,通過mar 參數設置了inner margin 的寬度,由於都是1,太窄了,所以坐標軸的標題沒顯示出來,下次遇到類似的問題,就知道因該將inner margin 設置的大一些
mar 參數的值是一個長度為4的向量,分別對應下,左,上,右 4個方向的inner margin, 只需要記住第一個對應的是下,然后沿逆時針方向設置就可以了;
解決了inner margin 的問題,那么outer margin 有是怎么一回事呢?
在figuer 區域和我們整個繪圖設備之間,其實還有一個邊距,這個邊距就是outer margin, 只不過默認值都是0,所以看不到
接下來我們用oma 參數設置outer margin 的值,將其設置的寬一點,然后再用box 標記出outer 邊框和figure 邊框,直觀的看一下,代碼如下:
par(oma=c(2,2,2,2)) attach(mtcars) plot(wt, mpg) abline(lm(mpg~wt)) title("Regression of MPG on Weight") box(which = "plot", col = "red", lwd = 2) box(which = "figure",col = "blue", lwd = 4) box(which = "outer", col = "black", lty = 8)
圖中虛線對應的就是outer 邊框,在outer 和 figure 邊框之間的就是 outer margin , 通過oma 參數的值來設置outer margin 的寬度,和mar 類似,也是從下方開始,沿着逆時針方向進行設置
通過上面的幾個例子,我們就可以看到,在R語言中,在一個繪圖設備上有3個不同的邊框,最外圈為outer 邊框,可以看作整張紙的邊沿,而中間的figure 邊框才是繪制圖形的地方,通過par 函數的oma 參數控制figure 區域的大小;
plot 區域繪制的是坐標系中的元素,在plot 區域和figure 邊框之間的inner margin 用來放置坐標軸刻度,標題等元素,通過par 函數的mar 參數可以設置其大小