我正在使用R创建一个房子的平面图,如下图所示,从底层开始:
basemap
:平面图的扫描版本,我把它放在底层以帮助阅读bed
:房子有几十张床,分散在房子的不同房间,根据居民的特点有不同的颜色piechart
:每张床都有一个顶部的饼图,再次根据居民的其他特征创建了饼图,有些床有拼贴图,有些则没有。基于底图创建的shp文件创建了bed
和piechart
(即我使用Mapwindow创建一个矢量图层,将底图导入为栅格图层并将其放在底部然后逐个绘制床。然后将床shp文件导入R,计算床多边形的质心,并且质心有助于定位饼图。
我使用read.jpeg
将basemap
导入imagematrix
对象,然后使用annotation_raster
中新的ggplot2 0.9
函数放置basemap
在底部地图图层,由于bed
图层也是基于basemap
创建的,因此bed
图层在basemap
图层上完美地叠加在ggplot2
图层上。
我可以毫无问题地创建地图 - 如果basemap
足够小(3000 x 3000
像素),现在我有basemap
个8000+ x 3000+
像素({{1}当我创建shp文件时,我没有意识到R内存问题,如果禁用object.size
,ggplot
对象可以编译,但R一直说我当我尝试将annotation_raster
包含到basemap
对象中时,可以使用xxxMB分配内存。
我认为这与jpg文件的压缩无关,因为即使我进一步压缩jpg文件,维度也不会改变。但我无法调整jpg文件的大小,因为我的ggplot
图层是根据原始jpg文件的维度创建的。
任何人都可以帮助缩小bed
的图像矩阵的大小,而不改变jpeg的维度,或其他一些技巧来处理R的内存限制吗?感谢。
答案 0 :(得分:0)
我修好了。
我首先创建了一个宽度和高度减半的新basemap
图像文件,然后在annotation_raster
我执行了以下操作:
chart <- chart + annotation_raster(db$temp.basemap,
xmin=0,
xmax=basemap.xlength*2, # I stretched the image in R
ymin=0,
ymax=basemap.ylength*2) # I stretched the image in R
现在可以在R的内存限制内编译地图,我能想到的缺点是图像质量降低,但这是可以承受的,因为它原来是8000 x 3000
。