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")

生成的圖片如下:

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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM