2016-10-22 8 views
0

Создание levelplot с помощью ggplot «s stat_density_2d я получаю„сломанные“многоугольников. Например, внешний в приведенном ниже примере.разорванные многоугольники в levelplot с использованием ggplot stat_density_2d

Как исправить это, чтобы получить гладкую форму?

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

Для воспроизводимого примера вы можете сделать scale_x_continuous (пределы = c (-1,75, 0,5)) + scale_y_continuous (пределы = c (-2.0, 2.1)) '. Вам просто нужно убедиться, что границы диаграммы достаточны, чтобы избежать обрезки полигонов. – hrbrmstr

ответ

1

Чтобы построить на @ hrbrmstr отвечают (что, по крайней мере, на моей машине, отсекает одну точку данных, поскольку х масштаб не достаточно широк), немного более активное участие подход будет чтобы получить пределы данных, установить пределы шкалы, а затем сбросить сюжет ограничивает обратно в исходный диапазон:

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) 

Выход:

enter image description here

+0

, что в значительной степени является тем, что было сказано в _ «Вам просто нужно убедиться, что границы диаграммы достаточны, чтобы избежать обрезки полигонов» _ – hrbrmstr

+0

@hrbrmstr - право, согласовано; надеюсь, мой ответ по-прежнему добавляет ценность, предполагая, что вы можете позволить себе быть намного более щедрым в настройке пределов шкалы, так как вы всегда можете восстановить исходные диапазоны через 'coord_cartesian'. –