2013-05-02 13 views
11

私はアメリカの地図をイメージに描きたいが、海を記入したい。アメリカの地図で海の青を色付けするにはどうすればいいですか?

は、ここに私の出発点である:

library(maps) 
library(graphics) 
image(x=-90:-75, y = 25:40, z = outer(1:15, 1:15, "+"), 
     xlab = "lon", ylab = "lat") 
map("state", add = TRUE) 

enter image description here

しかし、私はソリッドカラーで充填されるメキシコの大西洋湾岸をしたいと思います。

+1

青い背景から開始してから、画像/ヒートマップ上の状態境界をマスクする方が簡単になるでしょう。 –

+1

また、海洋に別のポリゴンを持っています( 'rgeos'にはポリゴンがないと差分機能があります)。 –

答えて

19

良い質問!これはどうですか? screen grab

library(maps) 
image(x=-90:-75, y = 25:40, z = outer(1:15, 1:15, "+"), 
     xlab = "lon", ylab = "lat") 
map("state", add = TRUE) 

library(grid) 
outline <- map("usa", plot=FALSE) # returns a list of x/y coords 
xrange <- range(outline$x, na.rm=TRUE) # get bounding box 
yrange <- range(outline$y, na.rm=TRUE) 
xbox <- xrange + c(-2, 2) 
ybox <- yrange + c(-2, 2) 
# create the grid path in the current device 
polypath(c(outline$x, NA, c(xbox, rev(xbox))), 
     c(outline$y, NA, rep(ybox, each=2)), 
     col="light blue", rule="evenodd") 

私は、グリッドパス(pdf here)のポール・マレルの(grid後ろの男性)最近のR-ジャーナルの記事を読んだ後、この問題に対する解決策に出くわしました。

は覚えておいてください:

は-Paulマレル(RジャーナルVol 4/2)

+0

+1素晴らしい解決策。 –

+0

+1あなたのソースに完全なクレジットを与える。 –

4

を "それはそれはあなたが描画しないように何、あなたが描くものではないのです" ここでの変種です交差/差分ポリゴンで作業を行うソリューションです。データセットwrld_simplは、他のSpatialPolygons *オブジェクトに置き換えることができます。

library(maptools) 
library(raster) 
library(rgeos) 

data(wrld_simpl) 

x <- list(x=-90:-75, y = 25:40, z = outer(1:15, 1:15, "+")) 

## use raster to quickly generate the polymask 
## (but also use image2Grid to handle corner coordinates) 
r <- raster(image2Grid(x)) 
p <- as(extent(r), "SpatialPolygons") 

wmap <- gIntersection(wrld_simpl, p) 
oceanmap <- gDifference(p, wmap) 

image(r) 
plot(oceanmap, add = TRUE, col = "light blue") 

oceanmap by poly intersection/differencing

(これにマップデータを変換すると、厳しいものになることができます、私はmaptools::map2SpatialPolygonsで簡単にそれを行うことができなかった、それはいくつかの回避策を取る)

3

私は(あなたの質問のタイトルを答えることができます「どのように私はアメリカの地図で海の色を塗りつぶすことができますか?」)、質問の本文に記載されている特定の状況ではありません(「の上に米国の地図を描きたいしかし、海を記入してください ")。

しかし、あなたの質問に遭遇した他の人に役立つ場合は、この回答を含めます。

map(database='state', bg='light blue') 

bgオプションは、海洋を含む地図の背景にライトブルーの色を与えます。

関連する問題