2016-07-20 5 views
4

Wenn ich aes(fill=...) verwende, um Faktorwerte in einer geom_dotplot anzugeben, überlappen sich Punkte unterschiedlicher Faktorstufen. Besonders bei großen Datensätzen wird dies problematisch.Überlappende Punkte bei der Verwendung von fill aesthetic in ggplot2 geom_dotplot in R

Im Folgenden habe ich ein minimales Beispiel und eine Abbildung eingefügt, in denen ich zuerst einen Datensatz ohne Farbfaktorebenen plotte und dann fill hinzufüge, um Faktorwerte anzugeben, was dazu führt, dass sich die Punkte überlappen. Wie kann ich das vermeiden?

Ich bin mir einer ähnlichen Frage bewusst here; Die Antworten lösen dieses Problem jedoch nicht.

library("ggplot2") 

n <- 200 
x <- data.frame(x = sample(x = letters[1:3], size = n, replace = TRUE), 
       y = rnorm(n = n, mean = 0, sd = 1), 
       a = sample(x = letters[4:5], size = n, replace = TRUE)) 

p1 <- ggplot(x, aes(x = x, y = y)) 
p1 <- p1 + geom_dotplot(binaxis = "y", stackdir = "center") 
p2 <- ggplot(x, aes(x = x, y = y, fill = a)) 
p2 <- p2 + geom_dotplot(binaxis = "y", stackdir = "center") 

minimal_example_dotplot

+0

Experiment mit 'geom_dotplot' opt spielen Ionen, dh: 'method =" histodot "' und 'dotsize = .5' – Robert

Antwort

3

Irgendwie diese Kombination von Argumenten, mit stackgroups = T mit binpositions kombiniert = "all" gibt ein schönes Ergebnis, aber nur für die zentrale Ebene des x-Variable zentriert.

ggplot(x, aes(x = x, y = y, fill=a)) + 
    geom_dotplot(binaxis = "y", 
       stackdir = "centerwhole", 
       method="dotdensity", 
       stackgroups = T, 
       binpositions="all") 

enter image description here

Ein wenig komplizierte Konstruktion ein ähnliches Ergebnis wie ergeben könnte, was Sie wollen: sie nutzt grid.arrange und eine spezielle Funktion eine gemeinsame Legende zu teilen (siehe here für den Code der grid_arrange_shared_legend Funktion)

for (i in 1:3){ 
    assign(paste0("g", i), ggplot(x %>% filter(x==levels(x$x)[i]), aes(x = x, y = y, fill=a)) + coord_cartesian(ylim=c(-3.5, 3.5))+ 
    geom_dotplot(binaxis = "y", stackdir = "center", method="dotdensity", stackgroups = T, binpositions="all")) 
} 
grid_arrange_shared_legend(g1, g2, g3) 

enter image description here

Verwandte Themen