2013-10-21 6 views
38

Wenn ggplot mit, ich shape auf 21-25 einstellen Formen zu erhalten, die für die interne (fill) unabhängige Einstellung hat und Rand (col) Farben, etwa so:Kontrollpunkt Randstärke in ggplot

df <- data.frame(id=runif(12), x=1:12, y=runif(12)) 
ggplot(df, aes(x=x, y=y)) + 
    geom_point(aes(fill=id, size=id), colour="black", shape=21) 

enter image description here

Allerdings kann ich nicht herausfinden, wie man die Dicke der Formgrenzen steuert, entweder absolut oder als ästhetisches Mapping. Ich stelle fest, dass, wenn ich einen lwd Wert gesetzt, es überschreibt die size Ästhetik:

ggplot(df, aes(x=x, y=y)) + 
    geom_point(aes(fill=id, size=id), colour="black", shape=21, lwd=2) 

enter image description here

Wie steuere ich die Rahmenstärke?

Antwort

37

Beginnend in der Version 2.0.0 von ggplot2 gibt es ein Argument zur Kontrolle der Grenzdicke der Punkte. Von der NEWS.md Datei:

geom_point() gewinnt einen Schlaganfall Ästhetik, die die Rahmenbreite der Formen 21-25 (# 1133, @SeySayux) steuert. Größe und Strich sind additiv, so dass ein Punkt mit der Größe = 5 und der Strich = 5 einen Durchmesser von 10 mm haben. (# 1142)

Somit ist die richtige Lösung für dieses Problem ist jetzt:

df <- data.frame(id=runif(12), x=1:12, y=runif(12)) 
ggplot(df, aes(x=x, y=y)) + 
    geom_point(aes(fill=id, size=id), colour="black", shape=21, stroke = 2) 

Output

+1

Können Sie die Ausgabe hinzufügen? – Thomas

+2

Für zukünftige Kompatibilität und Klarheit wäre es schön zu sagen "Beginnend in der Version x.xx" und nicht "die neueste Version". – Gregor

13

Es fühlt sich ein bisschen hacky, aber Sie können einen „Hintergrund“ mit der Größe der ästhetischen Mapping plus einige kleine Konstante zu vergrößern die Grenze der Punkte gesetzt von Punkten hinzufügen. Spielen Sie mit der Konstante, um die gewünschte Rahmenbreite zu erhalten.

Sie werden auch die Größe Legende zu deaktivieren, um es auf dem Diagramm die Legende nicht mehr angezeigt ...

ggplot(df, aes(x=x, y=y)) + 
    geom_point(aes(size=id+0.5), colour="black" , show_guide = FALSE)+ 
    scale_size(guide = "none")+ 
    geom_point(aes(fill=id, size=id), colour="black", shape=21) 

enter image description here

+2

Vielleicht hackey, aber Hadley unterstützt diese Methode auf Twitter –

+1

@NoamRoss haben Sie den Link für Das? –

+3

@ Simon101 https://twitter.com/hadleywickham/status/392440209922469888 –

3

Eine andere Lösung ist die Handlung in R zu erstellen und dann den Export es zu einer .svg-Datei. Die Linienbreite kann dann unter Verwendung einer Vektorgraphikbearbeitungssoftware (z. B. Inkscape) geändert werden. Diese Methode ist besonders nützlich, wenn sich Datenpunkte überlappen.