2017-06-24 14 views
1

Ich versuche zu verstehen, wie ggplot/grid die zu rendernde Punktgröße bestimmt. This answer (mit Kommentar von Hadley) beschreibt die Rolle .ptmagische Zahl Konstante, aber ich kann nicht sehen, wie sich die Zahlen summieren. Dies zeigt:ggplot2: Verstehen Punktgröße

# 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

ich auf die Größe 76.15 durch Versuch und Irrtum bekam. Bei dieser Größe berühren sich die zwei quadratischen Punkte, aber ich verstehe nicht warum. Das Grundstück ist 6 Zoll breit = 152,4 mm. Um zu treffen, müssen die Punkte 2 Zoll breit sein = 50,8 mm. Aber ich kann nicht sehen, wie Größe 76.15 auf 50.8mm über den Multiplikator .pt (2.845276) abbildet.

Alle Vorschläge sehr geschätzt. Ich sollte hinzufügen, dass bei Verwendung shape=15 anstelle von 22 die Punktgröße für das gleiche Ergebnis ist 67.15, aber ich bin mir nicht sicher, dass bringt uns näher an die Antwort.

Antwort

2

Sie können diesen alten Thread nützlich finden: http://r.789695.n4.nabble.com/Fwd-R-size-of-point-symbols-td923507.html

Im Wesentlichen: die einzige Referenz, die Größe von Punktformen, um herauszufinden, ist der Quellcode (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; 

Formen 0,1, 4,7,8,10,12,13,14,15,16,18,19,21 scheinen durch ein Quadrat verkleinert um einen Faktor 0,75,

enter image description here

eingeschränkt werden
+0

Miau Professor Ripley! Nun, ich habe auch Mühe, das oben Gesagte zu verstehen, außer RADIUS ist 0.375 und SQRC ist sqrt (pi/4). 'toDeviceWidth' Zeile (' result = (result/dd-> dev-> ipr [0])/fabs (dd-> dev-> right - dd-> dev-> left); ') geht über mich hinaus. Ist deine ggplot2-Idee zu etwas gekommen? – geotheory

+0

IIRC Ich habe ein geom_ngon mit regulären Polygonen gemacht (im sogenannten ggExtra-Paket, jetzt im Ruhestand), aber es war nicht sehr nützlich. – baptiste

+0

Prost dude. Ich nehme an, dass ich für meine aktuellen Zwecke einen Punkt-zu-Zoll-Multiplikator von 38.075 annehmen werde und wie das geht. – geotheory