R語言繪圖邊框的單位

轉載自博客廬州月光,向作者表示感謝
http://www.cnblogs.com/xudongliang/p/6874659.html

在R語言中指定畫圖邊框時,通常使用兩種單位, lines 和 inches當然,這兩個單位之間是可以相互轉換的,那麼 1 inch = ? line

答案是1 inches = 5 lines

下面給出具體的分析過程:
par 函數中有兩個參數,返回的是margin的寬度,只不過單位不同:

  1. mar : 返回邊框的寬度, 返回值的單位爲 lines

  2. 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,統一單位。

生成的圖片如下:

從圖中可以看出,通過這種方式指定邊距,非常的精確,不多也不少,保證在所有情況下,都會顯示出對應的邊距

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章