2013-06-26 89 views
23

我在網上找不到答案的一個簡單問題(或Wickham的書):ggplot2 - 單位大小

ggplot2中size參數的單位是什麼?例如,geom_text(size = 10) - 10在什麼單位?

編輯:同樣的問題適用於ggsave爲默認裝置(高度= 10,寬度= 10)

+0

到現在爲止,我相信文本大小是以點爲單位的(如字體大小)。這是否仍然如此,儘管是一個簡單的解釋? 在'pdf()','postscript()'等等中,'height'和'width'是以英寸給出的,所以假設'ggsave'也使用英寸是錯誤的? – MrGumble

回答

29

答案是:單位是分數。它是grid包中字體大小的單位。在?unit,我們發現下面的定義

"points" Points. There are 72.27 points per inch. 

(但要注意密切相關的 「bigpts」 Big Points. 72 bp = 1 in.

內部ggplot2將通過一個神奇的數字ggplot2:::.pt,定義爲1/0.352777778乘以字號。

這裏的演示,我創建使用網格和GGPLOT2大小相同的信:

library(grid) 
library(ggplot2) 
ggplot(data=data.frame(x=1,y=1,label=c('A'))) + 
    geom_text(aes(x,y,label=label),size=100) 
## I divide by the magic number to get the same size. 
grid.text('A',gp=gpar(fontsize=100/0.352777778,col='red')) 

enter image description here

補遺由於@baptiste

的 「幻數」(在aaa-constants.r中定義爲.pt < - 1/0.352777778)實際上只是「點」和「mm」之間的轉換因子,t帽子是1/72 * 25.4 = 0.352777778。不幸的是,grid在「pts」和「bigpts」之間做了細微的區分,這就解釋了爲什麼convertUnit(unit(1, "pt"), "mm", valueOnly=TRUE)給出了0.3514598的稍微不同的值。

+0

很好的答案。這可能是我爲什麼不知道爲什麼這樣做了,但這不是有點冒險嗎? – thelatemail

+0

那麼指定尺寸時,一個好的做法是什麼?我經常發現自己想知道哪個尺寸是合適的,這是我的問題的最初動機。再次感謝好的演示! – Heisenberg

+1

@thelatemail謝謝。你會談論魔法數字的分裂嗎?它看起來像一個骯髒的實現,但我不認爲這是一種妥協。請注意:1)ggplot2中沒有很多常量,2)當您處理文本時,您必須執行類似這個,(在基本情節中也可以看到strheight()和strWidth())...但我認爲我們會從ggplot2精通人士那裏得到更好的解釋... – agstudy

2

?aes_linetype_size_shape

# Size examples 
# Should be specified with a numerical value (in millimetres), 
# or from a variable source 

height和ggsave width涉及par("din")?par

din 

    R.O.; the device dimensions, (width, height), in inches. See also dev.size, 
    which is updated immediately when an on-screen device windows is re-sized. 

所以我認爲sizeaes是以毫米爲單位,ggsaveheightwidth以英寸爲單位。

6

「ggplot2」包,就像之前的「格子」一樣,構建在grid包裝上。您可以在獲得可用單位:

?grid::unit 
?grid::convertX 
?grid::convertY 

grid::convertX(grid::unit(72.27, "points"), "inches") 

(我用的是形式主義pkg::func因爲在大多數情況下grid裝載AA命名空間,但不是當任lattice或`GGPLOT2加載附後。)

我前面貼我後來刪除了一條評論,說size是點數。在看到size=10的文字大小約爲10毫米後,我這樣做了。agstudy提到的「魔術」數字實際上在1%的範圍內:

as.numeric(grid::convertX(grid::unit(1, "points"), "mm")) 
#[1] 0.3514598 
0.352777778/.Last.value 
#[1] 1.00375 
+0

非常具有洞察力 – user1609452

+0

我曾經以爲單位的大小是毫米http://groups.google.com/group/ggplot2-dev/tree/browse_frm/thread/37ba1aaaf8e22b38/a2c142da58418570?hide_quotes=no&pli=1我想知道爲什麼幻數不是0.3514598。 – user1609452

+0

哈德利的設備也許就是這個尺寸比例。我正在做一個六歲的Mac。 –