2016-04-11 14 views
1

Die ggplot() Funktion und alles, was darüber gebaut wird, ignoriert die globale Punktgröße. Funktionen wie plot() und text() tun dies jedoch nicht. Die früheren Funktionen erwarten, dass die Schriftgrößen in absoluten Zahlen angegeben werden, und zwar durch einen size Parameter, während die letzteren mit cex arbeiten, was eine relative Skalierung macht.Relative und absolute Schriftgrößen in R: Mischen nativer und ggplot2 Methoden

Es ist nicht immer möglich, diese Mechanismen zu vermischen. Hier ein Beispiel: Sie möchten eine Reihe von Polygonen plotten und Beschriftungen in ihnen platzieren, normalerweise für eine Karte. Vor allem bei stark nichtkonvexen Polygonen empfiehlt es sich, rgeos::polygonsLabel() (statt etwa coordinates()) zu verwenden, um die geeigneten Etikettenpositionen zu bestimmen. Diese Funktion baut auf text() auf und ermöglicht Ihnen wiederum nur relative Schriftgrößen. Aber vielleicht möchten Sie später die Etiketten mit geom_text() aus dem Paket ggplot2 platzieren; Für eine optimale Nutzung der Ausgabe rgeos::polygonsLabel() müssen die Schriftgrößen hier übereinstimmen.

Antwort

1

Ich habe das folgende Beispiel gefunden, um wie erwartet zu arbeiten und möchte es teilen, da es eine Weile gedauert hat, um dorthin zu gelangen. Bitte korrigieren Sie mich, wenn ich etwas mache, das ich nicht sein sollte, z. mit der Punkt-zu-mm-Konvertierung. Ich werde eine PNG-Bilddatei für diese Kompatibilität mit dieser Website erstellen, aber z. B. SVG und PDF funktionieren genauso gut.

pointSize <- 20 # or whatever you want 

# Setting point size here affects the native plotting methods 
# like text() 
png('myfigure.png', pointsize=pointSize) # apparent default: 12 

library(ggplot2) 
plot.new() 

pointToMM = function(x) 0.352778*x 

# plot a few 'o's 
p <- ggplot(mtcars, aes(wt, mpg, label = 'o')) + 
    geom_text(size = pointToMM(pointSize)) # apparent default: pointToMM(11) 

# label the axes in the same 
p <- p + labs(x = 'xo xo xo xo xo xo', y = 'xo xo xo xo xo xo') + 
    theme_bw(pointSize) # apparent default: 12 

print(p) 

# Add 'xo' in two places. Notice how the sizes match up. 
# The x and y coordinates were chosen ad-hoc for this example 
text(0.35,0.13, 'xo') 
text(0.5, 0.0, 'xo') 

dev.off() 

sample plot