Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 多边形以不同的缩放级别精确裁剪ggplot2/ggmap_R_Ggplot2_Polygon_Ggmap - Fatal编程技术网

R 多边形以不同的缩放级别精确裁剪ggplot2/ggmap

R 多边形以不同的缩放级别精确裁剪ggplot2/ggmap,r,ggplot2,polygon,ggmap,R,Ggplot2,Polygon,Ggmap,我正在玩一个空间数据集(主要是城市某个区域的多边形),我想根据不同的缩放级别生成不同的视图。 当我的绘图边界框大于包含多边形的区域时,一切都很好。但是,在放大时,某些多边形会得到边界框之外的部分,而这些多边形的输出是有问题的:边界框之外的多边形的点不会显示,从而导致多边形不会在边界框限制处裁剪(如预期的那样),而是不会被考虑。多边形不完整,多边形仅连接绘图上剩余的点(正常行为,但不需要) 这是一个值得讨论的好例子,下面是该问题的演示: #initialisation library(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)
你知道一种很好的方法,可以在绘图边界框限制处正确裁剪多边形吗? 谢谢你的帮助


Pascal

通常,此剪裁是由于使用缩放限制(放置范围外的点)进行缩放,而不是使用坐标限制(这是一种真正的缩放,仅绘制范围内的零件,而范围外的零件仍在那里)
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()
s12