Как я могу построить карту континентов с помощью R?

Существует много решений для построения карт на уровне страны, но в моем случае я хочу напечатать статистику на уровне континента.

Единственное, что мне приходит в голову, - это использовать карты уровня страны и использовать список стран для каждого континента, но мне было интересно, есть ли какое-нибудь простое решение для такого рода карт. Для реализации моей идеи это было бы так:

## 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)

карта мира

3 ответа

Решение

rworldmap имеет функции для построения или агрегирования данных на региональные уровни, включая континенты.

Простое начало, которое должно привести к сюжету ниже:

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

Или для модели 7 континентов:

mapCountryData(sPDF, nameColumnToPlot='REGION')

Для агрегирования ваших собственных данных из страны на региональный уровень посмотрите на:

?mapByRegion

Карта континента

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

введите описание изображения здесь

Следуя ответу @Andy, вы можете объединить полигоны стран на каждом континенте следующим образом:

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

введите описание изображения здесь

Другие вопросы по тегам