2013-11-22 3 views
6

Esistono molte soluzioni per tracciare mappe a livello di paese, ma nel mio caso voglio stampare statistiche a livello di continente.Come posso tracciare una mappa dei continenti con R?

L'unica cosa che mi viene in mente è utilizzare le mappe a livello di paese e utilizzare un elenco di paesi per ogni continente, ma mi chiedevo se esiste una soluzione semplice per questo tipo di mappe. Per implementare la mia idea sarebbe come questo:

## produce the world map 
map() 
## list of countries per continent 
SA <- c("argentina", "bolivia", "brazil", "chile", "colombia", "ecuador", "guyana", "paraguay", "peru", "suriname", "uruguay", "venezuela") 
map(regions = SA, fill=TRUE, add=TRUE) 

worldmap

+0

Cercare il file continenti forma? Senza codice, questa è una richiesta off-topic per uno strumento/libreria. – Thomas

+0

Sto chiedendo che il codice R produca qualcosa come la foto. –

+1

@David Ameller Sarà meglio pubblicare il tuo codice finora. –

risposta

12

rworldmap ha funzioni per la stampa o l'aggregazione dei dati a livello regionale tra i continenti.

Un inizio semplice che dovrebbe produrre la trama di seguito:

library(rworldmap) 
#get coarse resolution world from rworldmap 
sPDF <- getMap() 
#mapCountries using the 'continent' attribute 
mapCountryData(sPDF, nameColumnToPlot='continent') 

O per il modello 7 continenti:

mapCountryData(sPDF, nameColumnToPlot='REGION') 

ad aggregare i propri dati da paese a guardare livello regionale a:

?mapByRegion 

rworldmap continent map

+0

Sai se è possibile con il tuo approccio ottenere il modello dei 7 continenti? http://en.wikipedia.org/wiki/Continent –

+0

Sì, è possibile utilizzare invece l'attributo REGION: 'mapCountryData (sPDF, nameColumnToPlot = 'REGION')'. Aggiungerò nella risposta. Questo dovrebbe funzionare anche con l'eccellente fusione del paese di @ Josh. – Andy

+0

Ho trovato l'output del seguente codice utile per comprendere i vari altri designatori di regioni, inclusi ma non dettagliati in? MapByRegion: 'reg <- c (" GEO3 "," GEO3major "," IMAGE24 "," GLOCAF "," Stern " "," SRES "," SRESmajor "," GBD "," AVOIDname "); sapply (reg, function (x) table (sPDF @ data [[x]])) ' –

5
library(sp) #Load your libraries 
library(maptools) 
#Download the continents shapefile 
download.file("http://baruch.cuny.edu/geoportal/data/esri/world/continent.zip", 
       "cont.zip") 
#Unzip it 
unzip("cont.zip") 
#Load it 
cont <- readShapeSpatial("continent.shp") 
#Plot it 
plot(cont, 
    col=c("white","black","grey50","red","blue","orange","green","yellow")) 
#Or any other combination of 8 colors 

enter image description here

+0

questa soluzione è buona, ma ho trovato che il PDF generato è troppo pesante. Inoltre ho trovato un po 'noioso dover scaricare un file di forma da una fonte esterna (riconosco anche che ha altri vantaggi). –

6

Facendo seguito a @ risposta di Andy, è possibile unire i poligoni di campagna all'interno di ogni continente in questo modo:

library(rworldmap) 
library(rgeos) 
library(maptools) 
library(cleangeo) ## For clgeo_Clean() 

sPDF <- getMap() 
sPDF <- clgeo_Clean(sPDF) ## Needed to fix up some non-closed polygons 
cont <- 
    sapply(levels(sPDF$continent), 
      FUN = function(i) { 
       ## Merge polygons within a continent 
       poly <- gUnionCascaded(subset(sPDF, continent==i)) 
       ## Give each polygon a unique ID 
       poly <- spChFIDs(poly, i) 
       ## Make SPDF from SpatialPolygons object 
       SpatialPolygonsDataFrame(poly, 
             data.frame(continent=i, row.names=i)) 
      }, 
      USE.NAMES=TRUE) 

## Bind the 6 continent-level SPDFs into a single SPDF 
cont <- Reduce(spRbind, cont) 

## Plot to check that it worked 
plot(cont, col=heat.colors(nrow(cont))) 

## Check that it worked by looking at the SPDF's data.frame 
## (to which you can add attributes you really want to plot on) 
data.frame(cont) 
#     continent 
# Africa    Africa 
# Antarctica  Antarctica 
# Australia   Australia 
# Eurasia    Eurasia 
# North America North America 
# South America South America 

enter image description here

+0

Grazie Josh, il tuo contributo è molto utile :) –

+0

Felice di aiutare. I requisiti per cui ogni oggetto 'Polygons' dovrebbe avere un ID univoco e che i dati di' SPDF'.i nomi dei giocatori di frame dovrebbero corrispondere a quelli ID rendono questo abbastanza complicato che ho pensato che potrei anche documentarlo per riferimento futuro. –

+0

Ciao Josh, sono in grado di eseguire il tuo esempio su Windows Machine ma non su una versione diff di R e rgeos in unix. per favore vedi questo link e suggerisci ... grazie in anticipo..http: //stackoverflow.com/questions/41404079/using-rgeos-library-to-merge-country-polygons – Munish