2014-08-27 9 views
8

Come si crea una mappa a 50 stati in R?Come si crea una mappa a 50 stati (anziché solo 48 in basso)

sembra che tutti l'esempio mappe persone hanno creato sono solo della parte bassa della 48

+0

Queste mappe sono chiamate "coroplethi". Una ricerca di Google per "stato di choropleth 50" mi ha trovato il pacchetto 'choroplethr' che può generare mappe con tutti i 50 stati. Aggiornamento – shadowtalker

risposta

5

This R-bloggers link potrebbe essere utile per voi.

Per dare uno sguardo, si può iniziare su una mappa 50-stato con

library(maps) 
map("world", c("USA", "hawaii"), xlim = c(-180, -65), ylim = c(19, 72)) 

enter image description here

Che ci crediate o no, Hawaii è lì. È davvero molto piccolo a causa dei margini.

14

Ci sono molti modi per farlo. Personalmente, trovo che Google abbia le mappe più attraenti. Raccomando ggmap, googleVis e/o RgoogleMaps.

Ad esempio:

require(googleVis) 

G4 <- gvisGeoChart(CityPopularity, locationvar='City', colorvar='Popularity', 
        options=list(region='US', height=350, 
           displayMode='markers', 
           colorAxis="{values:[200,400,600,800], 
           colors:[\'red', \'pink\', \'orange',\'green']}") 
) 
plot(G4) 

Produce questo:

enter image description here

Un altro approccio che vi darà un risultato più attraente rispetto maps è quello di seguire l'approccio di this tutorial che mostra come importare mappe personalizzate da Inkscape (o, equivalentemente, Adobe Illustrator) in R per la stampa.

Vi ritroverete con qualcosa di simile:

R and Inkscape

Ecco un modo ad essa con choroplethr e ggplot2:

ggplot2

:

library(choroplethr) 
library(ggplot2) 
library(devtools) 
install_github('arilamstein/[email protected]') 
library(choroplethrZip) 

data(df_zip_demographics) 
df_zip_demographics$value = df_zip_demographics$percent_asian 

zip_map = ZipChoropleth$new(df_zip_demographics) 
zip_map$ggplot_polygon = geom_polygon(aes(fill = value), 
             color = NA) 
zip_map$set_zoom_zip(state_zoom = NULL, 
        county_zoom = NULL, 
        msa_zoom = NULL, 
        zip_zoom = NULL) 
zip_map$title = "50 State Map for StackOverflow" 
zip_map$legend = "Asians" 
zip_map$set_num_colors(4) 
choro = zip_map$render() 
choro 

data(df_pop_state) 
outline = StateChoropleth$new(df_pop_state) 
outline = outline$render_state_outline(tolower(state.name)) 

choro_with_outline = choro + outline 
choro_with_outline 

che ti dà

+0

: ho scritto un post sul blog per accompagnare questa soluzione http://hack-r.com/?p=507 –

2

Si potrebbe prendere in considerazione l'utilizzo della mappa state.vbm nel pacchetto maptools, che include tutti i 50 stati e rende più visibili gli stati più piccoli (funziona bene per colorare o aggiungere trame a ciascuno stato, ma le distanze tra i siti non saranno esatte) .

Un'altra opzione è disegnare i 48 stati contigui, quindi nelle aree aperte aggiungere Alaska e Hawaii. Un'opzione per fare ciò è usare la funzione subplot dal pacchetto TeachingDemos.

Ecco qualche esempio di codice utilizzando un paio di shapefile fornite dal pacchetto MapTools:

library(maptools) 
library(TeachingDemos) 

data(state.vbm) 
plot(state.vbm) 

yy <- readShapePoly(system.file("shapes/co37_d90.shp", package="maptools")[1]) 
zz <- readShapePoly(system.file("shapes/co51_d90.shp", package="maptools")[1]) 
xx <- readShapePoly(system.file("shapes/co45_d90.shp", package="maptools")[1]) 
plot(yy) 
par('usr') 

subplot(plot(zz), c(-84,-81), c(31,33)) 
subplot(plot(xx), c(-81, -78), c(31,33)) 

Si sarebbe solo bisogno di trovare i file di forma appropriati per gli stati.

4

Resurrezione di un thread precedente perché non ha ancora una risposta accettata.

albersusa pacchetto Partenza @ di hrbrmstr:

devtools::install_github("hrbrmstr/albersusa") 
library(albersusa) 
plot(usa_composite(proj="laea")) 

che produce

enter image description here

e può fare molto di più

us <- usa_composite() 
us_map <- fortify(us, region="name") 

gg <- ggplot() 
gg <- gg + geom_map(data=us_map, map=us_map, 
        aes(x=long, y=lat, map_id=id), 
        color="#2b2b2b", size=0.1, fill=NA) 
gg <- gg + theme_map() 

gg + 
    geom_map([email protected], map=us_map, 
      aes(fill=pop_2014, map_id=name), 
      color="white", size=0.1) + 
    coord_proj(us_laea_proj) + 
    scale_fill_viridis(name="2014 Populaton Estimates", labels=comma) + 
    theme(legend.position="right") 

enter image description here

Problemi correlati