2013-04-15 181 views
3

我想製作一些英倫三島地圖,並遇到了一個非常奇怪的內存問題。我的工作流程利用ggplot的圖層將新的細節添加到底圖上。ggplot地圖奇怪的內存問題

底圖本身需要用於從GADM英國和愛爾蘭形狀文件,簡化了在MapTools使用thinnedSpatialPoly幾何形狀,導致在此映射:

enter image description here

然後,對於後續層,我做同樣的事情:在SHP文件加載,簡化的幾何形狀和它添加到底圖,如:

# new_data is a SpatialPolygonsDataFrame 
base_map + geom(data=new_data, color="black", fill=my_fill) 

enter image description here

對於大多數地圖,我使這個作品很好。然而,當我嘗試添加一個特定層,R凍結並最終使我有以下錯誤:

Error: cannot allocate vector of size 86.9 Mb 
In addition: Warning messages: 
1: In data.frame(x = x, y = y, aes_df) : 
    Reached total allocation of 3953Mb: see help(memory.size) 
2: In data.frame(x = x, y = y, aes_df) : 
    Reached total allocation of 3953Mb: see help(memory.size) 
3: In as.data.frame.numeric(x[[i]], optional = TRUE) : 
    Reached total allocation of 3953Mb: see help(memory.size) 
4: In as.data.frame.numeric(x[[i]], optional = TRUE) : 
    Reached total allocation of 3953Mb: see help(memory.size) 
5: In as.data.frame.numeric(x[[i]], optional = TRUE) : 
    Reached total allocation of 3953Mb: see help(memory.size) 
6: In as.data.frame.numeric(x[[i]], optional = TRUE) : 
    Reached total allocation of 3953Mb: see help(memory.size) 

生成此圖中的代碼是完全一樣的上方。如果我自己繪製新圖層,例如

ggplot(new_data, aes(x=long, y=lat, group=group)) + geom_polygon 

然後沒有問題,地圖繪製得非常快。爲了在磁盤上參考,形狀文件是769 KB,而其他層是248 KB。

我在這裏如何調試和解決這個問題。任何指針都會很棒 - 謝謝!

+0

您可以加入用於生成英國的底圖的代碼? – KatyB

回答

2

我應該猜對了......問題是在底圖和新圖層上有不同​​的投影。如果我記得包含與基礎圖層相同的coord_map投影,新圖層將使用Traverse墨卡託投影,這會導致內存問題。

您可以重新創建通過下載這些shape文件(我用UKBORDERS,但你也可以從CDU,其中使用再一次不同的投影讓他們),然後做類似的問題:

ggplot(new_data, aes(x=long, y=lat, group=group)) + geom_polygon() + 
     coord_map(proj="azequalarea") 

要修復它,請將原始shapefile加載到QGis中,選擇Settings > Project Properties...並選擇WGS 84投影,應用並保存。新的shapefile工作得很好,給我這個可愛的結果:

enter image description here