2013-05-02 12 views
11

Mi piacerebbe disegnare una mappa degli Stati Uniti su un'immagine, ma poi riempire gli oceani.Come posso colorare l'oceano blu in una mappa degli Stati Uniti?

qui è il mio punto di partenza:

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

ma vorrei l'Oceano Atlantico e il Golfo del Messico da riempire in un colore solido.

+1

Probabilmente sarebbe più facile iniziare con uno sfondo blu e quindi mascherare i confini dello stato sopra l'immagine/mappa di calore. –

+1

Oppure un poligono separato per l'oceano (penso che 'rgeos' abbia una funzione di differenziazione se non si dispone già di un poligono). –

risposta

19

Buona domanda! Com'è questo? 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") 

mi sono imbattuto la soluzione a questo problema dopo aver letto di Paul Murrell (l'uomo dietro grid) recente articolo R-Journal su sentieri griglia (pdf here).

Ricorda:

"Non è cosa si disegna, è quello che non disegnare" -Paul Murrell

+0

+1 bella soluzione. –

+0

+1 per dare pieno credito alle tue fonti. –

4

Ecco una variante per il (R Journal Vol 4/2.) soluzione che fa il lavoro intersecando/differenziando poligoni. Il set di dati wrld_simpl potrebbe essere sostituito da qualsiasi altro oggetto 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

(Conversione dei dati mappe per questo può essere difficile, non ho potuto farlo facilmente con maptools::map2SpatialPolygons, ci sarebbe voluto un po 'di soluzione)

3

posso rispondere il titolo della tua domanda ("Come posso colorare l'oceano blu in una mappa degli Stati Uniti?"), Anche se non la situazione specifica come è descritta nel corpo della domanda ("Mi piacerebbe disegnare una mappa degli Stati Uniti su un'immagine , ma poi riempi gli oceani ").

Tuttavia, includo questa risposta nel caso in cui sia utile per gli altri che incontrano la tua domanda.

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

L'opzione bg dà un colore azzurro a sfondo della mappa, che comprende gli oceani.

Problemi correlati