2017-06-24 75 views
1

我想了解如何ggplot /網格決定點大小呈現。 This answer(來自Hadley的評論)描述了.pt的作用,其數字爲不變,但我看不出數字如何加起來。這表明:ggplot2:理解點大小

# empty ggplot obj with no margins outside panel 
p0 = ggplot() + scale_size_identity() + 
    scale_y_continuous(expand = c(0,0)) + scale_x_continuous(expand = c(0,0)) + 
    theme(axis.text = element_blank(), panel.grid = element_blank(), 
     panel.border = element_rect(colour='black', fill='transparent'), 
     panel.spacing = unit(0, 'mm'), axis.ticks.length = unit(0, "mm"), 
     plot.margin=unit(c(0,0,0,0), "mm")) + labs(x=NULL, y=NULL) 

# 2 data points plus 2 corner points to define bbox ('limits' args seem to force extra margins) 
d = data.frame(x = 1:4, y = c(100,150,250,300), sz = c(0,76.15,76.15,0)) 

p = p0 + geom_point(data=d, aes(x, y, size=sz), fill='red', stroke=0, shape=22, alpha=.8) 

# output to pdf and open 
fn='test.pdf'; ggsave(p, filename = fn, w=6, h=4, units = "in"); browseURL(fn) 

enter image description here

我通過反覆試驗得到了大小76.15。這個大小得到兩個正方形的點,但我不明白爲什麼。該圖是6英寸寬= 152.4毫米。要滿足,點必須是2英寸寬= 50.8毫米。但我看不到尺寸76.15如何通過.pt乘數(2.845276)映射到50.8毫米。

任何建議非常感謝。我應該補充一點,當使用shape=15而不是22時,同樣結果的磅值是67.15,但我不確定這會讓我們更接近答案。

回答

2

您可能會發現這個古老的線程有用:http://r.789695.n4.nabble.com/Fwd-R-size-of-point-symbols-td923507.html

本質:唯一可用的參考找出點形狀的大小是源代碼(src/main/engine.c

case 22: /* squares */ 
    xc = toDeviceWidth(RADIUS * SQRC * GSTR_0, GE_INCHES, dd); 
    yc = toDeviceHeight(RADIUS * SQRC * GSTR_0, GE_INCHES, dd); 
    GERect(x-xc, y-yc, x+xc, y+yc, gc, dd); 
    break; 

形狀0,1, 4,7,8,10,12,13,14,15,16,18,19,21似乎被以因子0.75按比例縮小的正方形被約束,

enter image description here

+0

喵喵Ripley教授!那麼我同樣努力去理解以上內容,除了RADIUS是0.375和SQRC是sqrt(pi/4)。 'toDeviceWidth'行('result =(result/dd-> dev-> ipr [0])/ fabs(dd-> dev-> right - dd-> dev-> left);')超出了我。你的ggplot2點的想法是否適用於任何事情? – geotheory

+0

IIRC我做了一個帶有正常多邊形的geom_ngon(在所謂的ggExtra軟件包中,現在已經退役),但它並不是非常有用。 – baptiste

+0

乾杯兄弟。我想爲我目前的目的,我會假設一個點數乘以38.075的倍數,並看看是怎麼回事。 – geotheory