4

イギリス諸島の地図を作成しようとしていて、非常に奇妙なメモリの問題に遭遇しました。私のワークフローでは、ggplot のレイヤーを利用して、ベース マップに新しい詳細を追加しています。

ベース マップ自体は GADM から英国とアイルランドのシェープ ファイルを取得し、MapToolsを使用してジオメトリを簡略化すると、次のthinnedSpatialPolyマップになります。

ここに画像の説明を入力

次に、後続のレイヤーについても同じことを行います。SHP ファイルを読み込み、ジオメトリを単純化し、ベース マップに追加します。次のようにします。

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

ここに画像の説明を入力

ほとんどのマップでは、これで問題なく動作しています。ただし、特定のレイヤーを 1 つ追加しようとすると、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 です。

これをデバッグして修正する方法について、ここで途方に暮れています。どんなポインタでも素晴らしいでしょう-ありがとう!

4

1 に答える 1

3

推測する必要がありました....問題は、ベースマップと新しいレイヤーの異なる投影法にありました。coord_map新しいレイヤーはトラバース メルカトル図法を使用していましたが、ベース レイヤー と同じ投影法を含めることを覚えていれば、それ自体でメモリの問題が発生する可能性があります。

これらのシェープファイルをダウンロードすることで問題を再現できます (私はUKBORDERSを使用しましたが、別のプロジェクションを使用するCDUから取得することもできます)。

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

それを修正するには、元のシェープファイルを QGis にロードしSettings > Project Properties...、投影を選択して選択しWGS 84、適用して保存します。新しいシェープファイルは問題なく動作し、次の素敵な結果が得られます。

ここに画像の説明を入力

于 2013-04-15T11:28:07.110 に答える