制作大范围和高分辨率地图的最佳方法是什么,最好是在ggmap中,而不会耗尽RAM?
背景: 我正试图用ggmap制作一张我城市的大地图。我说的很大,因为我希望地图足够详细,可以放大保存的pdf,并且仍然可以读取街道名称。我认为大约15的缩放级别将实现这一点。
问题是我因内存不足而导致计算机崩溃。是否有任何秘密可以使这样的东西工作?我要下载的地图有~1100个瓷砖。我可以下载它甚至在R中绘制,但是试图保存它会崩溃R.我可以看到它是碎片然后在像photoshop这样的东西拼接它,但这看起来很傻。在我看来,像ggmap(和ggplot2)在内存中做了很多事情,我想知道是否有办法将这些文件直接写入磁盘。
感谢您提供的任何帮助!
答案 0 :(得分:4)
我认为你有两个问题:
一种解决方案是使用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
here
png()
属性
2。你可以一次性绘制一些非常大的东西。
这是事情变得有趣的地方。您可以使用分层方法查看创建图像。即:通过id /分组绘制大数据集中的多边形/线/点(我不确定数据的确切外观 - 希望这会有所帮助)。 我已经给出了一些灵感的演示:
# 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()函数非常便于生成多层图。它明显快于R中的for()
循环。