2017-10-22 1 views
3

Während ich ein Kreisdiagramm mit ggplot2 erstellte, stolperte ich über ein merkwürdiges Verhalten des Beginns des Polarkoordinatenplots. Wenn wirgeom_point Einführung Verschiebung des Beginns von geom_polar Torte (Donut) Diagramm

dta <- data.frame(val = 1:60, col = rep(c(0,1), each = 10)) 

und ein Tortendiagramm machen mit

library(ggplot2) 
ggplot(dta, aes(x = val, y = 2, fill = factor(col), color = factor(col))) + 
    geom_col() + 
    coord_polar(start = 0) 

wir mit einem Kreisdiagramm am Ende wie erwartet: enter image description here

Sag mal, wir ein wenig Donut-Loch erstellen möchten in In der Mitte des Diagramms können wir dies erreichen, indem wir einen Punkt in der Mitte hinzufügen:

ggplot(dta, aes(x = val, y = 2, fill = factor(col), color = factor(col))) + 
    geom_col() + 
    coord_polar(start = 0) + 
    geom_point(aes(0,0), size = 30, color = "lightgrey", show.legend = FALSE) 

Dieser Punkt führt jedoch zu einer seltsamen Verschiebung des Starts des Kreisdiagramms, die zu einem kleinen grauen Sektor an der Spitze führt.

enter image description here

Warum diese Verschiebung verursacht wird? Wie kann es vermieden werden? Übrigens. Diese Verschiebung wird auch durch andere Geome wie geom_vline(xintercept = 0) eingeführt.

Antwort

4

Die Verschiebung sieht aus wie aus ?scale_x_continuous(). Sein expand Argument sagt, "Die Standardwerte sind c (0,05, 0) für kontinuierliche Variablen und c (0, 0,6) für diskrete Variablen.".

Also, wenn Sie diese Lücke beseitigen möchten, können Sie Ihre geom_point() Schicht außerhalb von aes() definieren scale_x_continuous zu verhindern dort einzulassen:

ggplot(dta, aes(x = val, y = 2, fill = factor(col), color = factor(col))) + 
    geom_col() + 
    coord_polar(start = 0) + 
    geom_point(x = 0, y = 0, size = 30, color = "lightgrey", show.legend = FALSE) 

enter image description here

oder zwicken die zum expand Argument übergeben Werte :

ggplot(dta, aes(x = val, y = 2, fill = factor(col), color = factor(col))) + 
    geom_col() + 
    coord_polar(start = 0) + 
    geom_point(aes(0,0), size = 15, color = "lightgrey", show.legend = FALSE) + 
    scale_x_continuous(expand = c(0,-.25)) 

Ich bin mir nicht sicher warum c(0,0) ergeben nicht die gewünschte Ausgabe ...

enter image description here

Für die geom_vline() Fall (wieder nicht sicher, warum dies funktioniert, coord_polar() ist pingelig fella) wir geom_vline(xintercept = .5) hinzufügen können, um entweder Strategie oben, und erhalten entsprechend platzierte vertikale Linie:

ggplot(dta, aes(x = val, y = 2, fill = factor(col), color = factor(col))) + 
    geom_col() + 
    coord_polar(start = 0) + 
    geom_point(x = 0, y = 0, size = 30, color = "lightgrey", show.legend = FALSE) + 
    geom_vline(xintercept = .5) 

enter image description here

ich denke, die erste Strategie, da die zweiten ap besser ist Birnen neigen dazu, die Farbgrenzen (und vline) von der "wahren" Vertikalen weg zu kippen. Habe das beim ersten Durchlauf im kleinen Vorschaufenster nicht gesehen ..

+0

Danke Mann, das geht gut. Allerdings verwende ich eine zusätzliche 'geom_vline', die auch den Fehler verursacht. Haben Sie eine Idee, wie Sie die erste Lösung auf 'geom_vline' anpassen können? – loki

+0

Welche Parameter übergeben Sie an die 'geom_vline()'? – Nate

+0

'geom_vline (xintercept = 0)' – loki