R語言繪圖邊框的單位
在R語言中指定畫圖邊框時,通常使用兩種單位, lines 和 inches當然,這兩個單位之間是可以相互轉換的,那麼 1 inch = ? line
答案是1 inches = 5 lines
下面給出具體的分析過程:
par 函式中有兩個引數,返回的是margin的寬度,只不過單位不同:
mar : 返回邊框的寬度, 返回值的單位為 lines
mai: 返回邊框的寬度, 返回值的單位為 inches
看下二者的返回值
> par("mar")
[1] 5.1 4.1 4.1 2.1
> par("mai")
[1] 1.02 0.82 0.82 0.42
因為二者返回的是同一個東西, 1.02 inches = 5.1 lines, 所以 1inch = 5 line
明白了不同單位之間的轉換比之後,如何利用這些資訊,準確的指定邊距呢?
看下面這個場景,在圖片的右側通過mtext 添加了一個字串,但是字串太長了,所以沒顯示全
為了顯示繪圖區域的範圍,我用box畫出了對應的邊框,從圖中可以看到,因為座標系和繪圖邊框之間的距離(也就是margin) 太窄了,所以文字沒顯示完整。
為了讓文字完整顯示,需要將右側的margin調大一點,我們知道,預設的margins = c(5, 4, 4, 2) + 0.1 lines ,最直接的方式就是把右側對應的數值調大一點,程式碼如下:
par(oma = c(1,1,1,1), mar = c(5.1, 4.1 , 4.1, 5.5))
plot(1:5, 1:5, type = "n")
mtext(side = 4, "metagenome", las = 1)
box(which = "inner")
調整完之後,效果圖如下:
上述的方法存在的一個問題就是,我需要不斷嘗試不同的值,直到滿足要求為止,而且不能夠精確的控制所需邊框的寬度,那麼有沒有解決方案呢?
在R語言中,有strwidth 和strheight兩個函式,用來計算一個字串所佔的寬度和長度,返回的長度可以自已選擇
通過strwidth計算出 “metagenome” 這個字元所佔的寬度,然後將對應的margin設定成這個值就可以了
a <- strwidth("metagenome", units = "inches", cex = 1)
right_margin <- 5 * a
par(oma = c(1,1,1,1), mar = c(5.1, 4.1, 4.1, right_margin))
plot(1:5, 1:5, type = "n")
mtext(side = 4, "metagenome", las = 1)
box(which = "inner")
#strwidth獲得的是數值單位是inches,而oma和mar引數中的向量均為lines,故此要×5,統一單位。
生成的圖片如下:
從圖中可以看出,通過這種方式指定邊距,非常的精確,不多也不少,保證在所有情況下,都會顯示出對應的邊距