2013-09-25 12 views
7

太平洋の地図をR's mapprojライブラリのWorld2Hiresを使ってプロットしようとしていますが、その国を埋めるときに奇妙な不具合があります。これをどうやって解決するのですか?ここで太平洋の塗りつぶし地図の地図

library(maps) 
library(mapproj) 
library(mapdata) 
map("world2Hires", 
    xlim=c(120, 260), 
    ylim=c(-60, 40), 
    boundary=TRUE, 
    interior=TRUE, 
    fill=TRUE, 
    col="gray30", 
) 
map.axes() 

は出力です:

Broken Map Image

+0

この問題の解決策を探している他の人には、他のいくつかの興味深い回答があります。ポリゴンを元のままにして、Pacを中心としたグローバルマップを可能にするソリューションについては、Josh O'Brienのhttp://stackoverflow.com/a/10749877/3897439を参照してください。データラインの近くでポリゴンを分割するには、Joris Meysのhttp://stackoverflow.com/a/5538551/3897439を参照してください。 –

答えて

6

問題はラッピングを引き起こす領域の小さなサブセットであるように思われます。いくつか試行錯誤して元のmapmapnames <- map(...)のように呼び出してから、新しい呼び出しでこのリストのサブセットをregions=引数に渡すと、塗りつぶしを回避することができました。例えば:

library(maps) 
library(mapproj) 
library(mapdata) 
map("world2Hires", regions=mapnames$names[c(1:7,14:641)], 
    xlim=c(120, 260), 
    ylim=c(-60, 40), 
    boundary=TRUE, 
    interior=TRUE, 
    fill=TRUE 
) 
map.axes() 
この出来事を防ぐために、より徹底や賢明な解決策については

enter image description here

、私は困惑しています。 wrap=オプションで再生すると、他のオプションと同様に役立つことはありません。副題として、この問題は"world"データベースでは表示されませんが、"world2""world2Hires"のためだけに表示されます。

+0

恐ろしい!回避策をありがとう! – Puzzled79

+0

@ Puzzled79 - 明らかに、この問題はこれまでにここで議論されています:http://stackoverflow.com/questions/5353184/fixing-maps-library-data-for-pacific-centred-0-360-longitude-display – thelatemail

5

@thelatemailの回答は、私がこの問題に遭遇した最も簡単で簡単な解決策です。より普遍的にするためには、ポリゴンを名前で削除する方が良いでしょう。これは、あなたが最初にmap()を呼び出したときの限界に応じて、ポリゴン名のインデックスが異なるためです。イギリス、フランス、スペイン、アルジェリア、マリ、ブルキナファソ、ガーナ、トーゴ:

library(maps) 
library(mapproj) 
library(mapdata) 

mapnames <- map("world2Hires", xlim=c(120, 260), ylim=c(-60, 40), 
       fill=TRUE, plot=FALSE) 

mapnames2 <- map("world2Hires", xlim=c(100, 200), ylim=c(-20, 60), 
       fill=TRUE, plot=FALSE) 

mapnames$names[10] 
[1] "Mali" 
mapnames2$names[10] 
[1] "Thailand" 

は本初子午線が交差している8カ国があります。

remove <- c("UK:Great Britain", "France", "Spain", "Algeria", "Mali", 
      "Burkina Faso", "Ghana", "Togo") 

map("world2Hires", regions=mapnames$names[!(mapnames$names %in% remove)], 
    xlim=c(120, 260), 
    ylim=c(-60, 40), 
    boundary=TRUE, 
    interior=TRUE, 
    fill=TRUE 
) 
map.axes() 

あなたはまた、(grepl使用することができます)が、ポリゴンをheirarchically命名されているので、あなたは国のいくつかのサブポリゴンを削除することがあります。mapnames$namesでこれらの国の名前を一致させることにより、あなたは、元の範囲に関係なくポリゴンを削除することができます問題のたとえば、mapnames$names[grepl("UK", mapnames$names)]は34個の一致を返します。

私はこれを編集として提案しましたが、まだ特権がありません。

+0

前回の答えに加えて素晴らしい追加。問題のある国の特定のサブセットを特定することは非常に役に立ちます。このような有用な情報を投稿し続けると、特権の欠如が長く続くことはありません。 – thelatemail

+0

ありがとう、@thelatemail!また、地図が破損している場合でも解決策がある可能性があります。これは、ポリゴンに交差するポリゴンを識別するためにポリゴンにN-Sライン(ブレーク経度で)をオーバーレイすることによって行われます。おそらく(線、ポリゴン)以上ですか? –

+0

この回答は、ポリゴンを再配置するhttp://stackoverflow.com/questions/5353184/fixing-maps-library-data-for-pacific-centred-0%C2%B0-360%C2%B0-longitude-displayです。経度線をまたいで分割する。 – thelatemail