R ggplot 和超出堆栈大小

问题描述 投票:0回答:1

我正在使用 R 在地图上显示一些多边形。多边形存储在 geoJson 文件中,并且多边形数量很多(大约 1000 个)。在某些 geojson 文件中可能更多。

这是读取 geojson 文件并在地图上绘制多边形的 R 程序:

library ("ggplot2")
library ("sf")
library ("rnaturalearth")
library ("rnaturalearthdata")
library ("ggspatial")
library ("geojsonR")

europe <- ne_countries (continent = "europe", scale = "medium", returnclass = "sf")
class (europe)

p <- ggplot (data = europe)
p <- p + geom_sf ()

js <- FROM_GeoJson (url_file_string = "file.geojson")

i <- 0
for (f in js$features) {
    if (!is.null (f$properties$InterferenceLevel)) {
        if (i < 250) {
            #print (f$properties$InterferenceLevel)
            #print (f$geometry$coordinates)
            overlay_polygon <- f$geometry$coordinates
            overlay_polygon <- sf::st_polygon (list(f$geometry$coordinates))
            #print (overlay_polygon)
            poly <- sf::st_as_sfc (list (overlay_polygon), crs = 4326)

            p <- p + geom_sf (data = poly, fill=alpha ("red", 0.2), color=alpha ("red", 0.2))
        }
        i <- i + 1
        #print (i)
    }
}

p <- p + coord_sf(xlim = c(-20, 42), ylim = c(35, 72))
plot (p)

我遇到的问题是,如果我想以这种方式绘制所有多边形,程序会停止并报告

Error: C stack usage  7970756 is too close to the limit

我添加了另一个涉及计数器的条件,以查看可以绘制多少个多边形。在 250 处显示地图。如果我走得更高,我会收到错误消息。

有人知道另一种在地图上绘制透明多边形而不填满堆栈大小的方法吗?我对 ggplot 没有太多经验。我一直在使用具有数万个点的图表,没有出现任何问题,但在这里我无法绘制超过数百个多边形。我确信有办法做到这一点。我只是不知道一旦地图显示在窗口中如何将它们添加到地图中。如果可以用其他函数来完成,那么它不一定是 ggplot。

r ggplot2 stack rnaturalearth ggspatial
1个回答
0
投票

它不是

sf
本身,你不能在
ggplot
中拥有这么多物品。此循环使用
geom_point
添加单个数据点并打印一个计数器,直到它倒下:

p = ggplot()
i = 1
while(TRUE){
 p = p + geom_point(data=data.frame(x=runif(1),y=runif(1)),aes(x=x,y=y))
 message(i);i=i+1
}

对我来说,这会持续到 878,然后我得到

Error: C stack usage  7974740 is too close to the limit

解决方案是将数据聚集到一个数据框中,并通过一次

geom_
调用添加它。

如果您需要以某种方式对它们进行着色或设置样式,请将其也保留在数据框中,并将该属性指定为向量参数,而不是

aes()
,例如:

geom_sf(all_my_polys, col=all_my_polys$colour)
© www.soinside.com 2019 - 2024. All rights reserved.