Полигоны прекрасно обрезают ggplot2/ggmap при разных уровнях масштабирования
Я играю с пространственным набором данных (в основном многоугольники над районом города), и я хотел бы создавать разные виды, основанные на разных уровнях масштабирования.
Все хорошо, когда у меня есть поле границы участка больше, чем область, содержащая многоугольники. Но при увеличении масштаба некоторые полигоны получают части, находящиеся за пределами граничного поля, и выход для этих многоугольников проблематичен: точки многоугольника вне граничного поля не отображаются, в результате чего полигоны, которые не обрезаны в границах границ коробки ( как и следовало ожидать), а скорее не рассматриваются. полигоны являются неполными, а многоугольник соединяет только точки, оставшиеся на графике (нормальное поведение, но не требуется).
хороший пример, заслуживающий внимания, вот демонстрация проблемы:
#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
Как правило, это отсечение происходит из-за масштабирования с использованием ограничений масштаба (которые выходят за пределы диапазона) по сравнению с использованием пределов координации (что является истинным масштабированием, просто рисуя детали внутри с частями вне диапазона, все еще там). 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()
![enter image description here]()