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)

您知道在绘图边界框限制处正确裁剪多边形的好方法吗?感谢您的帮助

帕斯卡

4

1 回答 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()

在此处输入图像描述

于 2012-11-20T17:16:04.770 回答