How can I plot a continents map with R?

前端 未结 3 1054
傲寒
傲寒 2021-01-04 14:34

There are many solutions to plot maps at country level, but in my case I want to print statistics at continent level.

The only thing that comes into my mind is to us

相关标签:
3条回答
  • 2021-01-04 14:43

    rworldmap has functions for plotting or aggregating data to regional levels including continents.

    A simple start that should produce the plot below :

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

    Or for the 7 continents model :

    mapCountryData(sPDF, nameColumnToPlot='REGION')
    

    To aggregate your own data from country to regional level look at :

    ?mapByRegion
    

    rworldmap continent map

    0 讨论(0)
  • 2021-01-04 15:03
    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 讨论(0)
  • 2021-01-04 15:04

    Following up on @Andy's answer, you could merge country polygons within each continent like so:

    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 讨论(0)
提交回复
热议问题