1

制作大范围和高分辨率地图的最佳方法是什么,最好在 ggmap 中,而不会耗尽 RAM?

背景:我正在尝试用 ggmap 制作我所在城市的大地图。我说大是因为我希望地图足够详细,以便可以放大保存的 pdf,并且仍然可以读取街道名称。我认为大约 15 的缩放级别可以做到这一点。

问题是我的计算机因内存不足而不断崩溃。有什么秘诀可以让这样的事情发挥作用吗?我要下载的地图有大约 1100 个图块。我可以下载它,甚至可以在 R 中绘制它,但是尝试保存它会使 R 崩溃。我可以看到它是分段进行的,然后用 Photoshop 之类的东西缝合它,但这似乎很愚蠢。在我看来,ggmap(和ggplot2)在内存中做了很多事情,我想知道是否有办法将这些文件直接写入磁盘。

谢谢你的尽心帮助!

4

1 回答 1

4

我认为你在这里有两个问题:

  1. 您正在绘制像素密度低的光栅图像(因此放大只会给您提供质量较差的图像)。

一种解决方案是使用 ggplot2 中的 ggsave() 函数输出到标量矢量图形 (.svg)。

例如:

library(ggplot2)
# Create dummy data
y=data.frame(matrix(rnorm(10000,5),ncol=2))
paste(object.size(y)/1e6,"mB")

# Save to image file
image=ggplot(data=x,aes(x=X1,y=X2))+geom_point()

# Write image to file
ggsave(filename="test.svg",plot=image,width=10,height=8,units="cm")

如果您不想要 .svg 文件,我会坚持使用 .png 文件。你可以看看这里res的属性png()

2. 你正在同时绘制一些非常大的东西。

这就是事情变得有趣的地方。您可以考虑使用分层方法创建图像。那就是:通过它们的 id/groupings 从大型数据集中绘制多边形/线/点(我不确定您的数据到底如何 - 希望这会有所帮助)。我提供了一个演示以获得一些灵感:

# Write to .svg
enter code here

# Make dummy data
test_data=data.frame(matrix(c(1,2.5,3,3,1.5,2,2,2,1,1,3,1,0,1),ncol=2))
test_data$id=c('a','a','a','a','b','b','b')

#Plot data
plot(c(1,2),c(3,3),xlim=c(0,4),ylim=c(0,4),pch=15,col='red')

#Plot layers in big dataframe
by(test_data[,c("X1","X2")],INDICES=test_data$id,polygon)

by() 函数对于生成多层图非常方便。它比for()R 中的循环快得多。

于 2014-03-16T09:19:40.183 回答