2016-10-22 3 views
0

ein levelplot Erstellen mit ggplot ‚s stat_density_2d ich "gebrochen" Polygone. Zum Beispiel der äußere im Beispiel unten.Gebrochene Polygone in levelplot ggplot mit stat_density_2d

Wie kann ich das beheben, um eine glatte Form zu bekommen?

enter image description here

set.seed(0) 
n <- 50 
d <- data.frame(x = rnorm(n, -.7, .5), 
       y = rnorm(n, 0, .8)) 
ggplot(d, aes(x, y)) + 
    geom_point() + 
    stat_density_2d(aes(fill = ..level..), alpha=.1, geom = "polygon") 
+1

Für das reproduzierbare Beispiel können Sie 'scale_x_continuous (Grenzen = c (-1.75, 0.5)) + scale_y_continuous (Grenzen = c (-2.0, 2.1))'. Sie müssen nur sicherstellen, dass die Grenzen des Diagramms ausreichen, um das Zuschneiden der Polygone zu vermeiden. – hrbrmstr

Antwort

1

auf @ hrbrmstr Antwort zu bauen (was zumindest auf meinem Rechner, einen Datenpunkt lops ab, weil die x-Skala nicht ausreichend breit ist), ein etwas aufwendigerer Ansatz würde werden die Grenzen der Daten zu erhalten, setzen Sie die Skalengrenzen, dann setzen Sie den Plot auf den ursprünglichen Bereich begrenzt zurück:

g <- ggplot(d, aes(x, y)) + 
    geom_point() + 
    stat_density_2d(aes(fill = ..level..), alpha=.1, geom = "polygon") 

dat_lims <- lapply(d, function(v) c(min(v), max(v))) 
plot_lims <- ggplot_build(g)$panel$ranges[[1]][c("x.range", "y.range")] 

g + 
    scale_x_continuous(limits = dat_lims$x * 1.1) + 
    scale_y_continuous(limits = dat_lims$y * 1.1) + 
    coord_cartesian(xlim = plot_lims$x.range, ylim = plot_lims$y.range) 

Ausgang:

enter image description here

+0

das ist ziemlich genau das, was in _ gesagt wurde "Sie müssen nur sicherstellen, dass die Grenzen des Diagramms ausreichend sind, um das Zuschneiden der Polygone zu vermeiden" _ – hrbrmstr

+0

@hrbrmstr - Recht, vereinbart; hoffentlich brachte meine Antwort noch einen Mehrwert, indem ich vorschlug, dass Sie es sich leisten können, bei der Festlegung der Skalengrenzen viel großzügiger zu sein, da Sie die ursprünglichen Bereiche immer durch 'coord_cartesian' wiederherstellen können. –