Вопрос по r, ggmap, polygon, ggplot2 – Полигоны красиво обрезают ggplot2 / ggmap при разных уровнях масштабирования

20

Я играю с набором пространственных данных (в основном полигоны над областью города), и я хотел бы создать разные виды, основанные на разных уровнях масштабирования. Все хорошо, когда у меня есть граничная рамка графика больше, чем область, которая содержит многоугольники. Но при увеличении некоторые полигоны получают детали, находящиеся за пределами граничного блока, и вывод для этих полигонов проблематичен: точки многоугольника за пределами граничного блока не отображаются, в результате чего многоугольники не обрезаются в пределах граничного блока ( как и следовало ожидать) а точнее не рассматриваются. полигоны являются неполными, и полигон соединяет только точки, остающиеся на графике (нормальное поведение, но нежелательное).

хороший пример, который стоит всего обсудить, вот пример проблемы:

#initialisation
library(ggmap)
require(MASS)

data(zips)

# overview
ggmap(get_map(maptype = "satellite", zoom = 8), extent = "device") +
        geom_polygon(aes(x = lon, y = lat, group = plotOrder),
                data = zips, colour = NA, fill = "red", alpha = .5) +
        geom_path(aes(x = lon, y = lat, group = plotOrder),
                data = zips, colour = "white", alpha = .7, size = .4)

# problematic view    
x11()
ggmap(get_map(maptype = "satellite", zoom = 12), extent = "device") +
        geom_polygon(aes(x = lon, y = lat, group = plotOrder),
                data = zips, colour = NA, fill = "red", alpha = .5) +
        geom_path(aes(x = lon, y = lat, group = plotOrder),
                data = zips, colour = "white", alpha = .7, size = .4)

знаете ли вы о хорошей технике для правильной обрезки полигонов на границах границ графика? Спасибо за вашу помощь

паскаль

Ваш Ответ

1   ответ
28

это ограничение происходит из-за масштабирования с использованием пределов масштаба (которые отбрасывают точки за пределами диапазона) по сравнению с использованием пределов координат (что является истинным масштабированием, просто рисуя части внутри с деталями за пределами диапазона, которые все еще там).ggmap не имеет прямого способа указать, что следует использовать второй тип масштабирования, но, взглянув на функцию, соответствующие части можно извлечь и собрать обратно:

s12 <- get_map(maptype = "satellite", zoom = 12) 
ggmap(s12, base_layer=ggplot(aes(x=lon,y=lat), data=zips),
      extent = "normal", maprange=FALSE) +
    geom_polygon(aes(x = lon, y = lat, group = plotOrder),
                 data = zips, colour = NA, fill = "red", alpha = .5) +
    geom_path(aes(x = lon, y = lat, group = plotOrder),
              data = zips, colour = "white", alpha = .7, size = .4) +
    coord_map(projection="mercator", 
              xlim=c(attr(s12, "bb")$ll.lon, attr(s12, "bb")$ur.lon),
              ylim=c(attr(s12, "bb")$ll.lat, attr(s12, "bb")$ur.lat)) +
    theme_nothing()

Похожие вопросы