How to create a world map in R with specific countries filled in?
Asked Answered
A

3

26

I would like to use R to generate a very basic world map with a specific set of countries filled with a red colour to indicate that they are malaria endemic countries.

I have a list of these countries in a data frame but am struggling to overlay them on a world map.

I have tried using the wrld_simpl object and also the joinCountryData2Map method in the rworldmap package.

I would comment on this answer to prevent addition of a possibly redundant question but I do not have enough reputation at the moment, apologies for this.

https://mcmap.net/q/536205/-using-r-maps-package-colouring-in-specific-nations-on-a-world-map

I am having difficulty understanding the arguments given to the plot() command - I wondered if there was just an easy way to tell R to plot all of the country NAMEs in my list on the wrld_simpl map instead of using grepl() etc. etc.

plot(wrld_simpl, 
     col = c(gray(.80), "red")[grepl("^U", wrld_simpl@data$NAME) + 1])
Anew answered 27/6, 2012 at 11:40 Comment(1)
@ttmaccer, why not add that as an answer?Anemic
R
28

Using the rworldmap package, you could use the following:

library(rworldmap)

theCountries <- c("DEU", "COD", "BFA")
# These are the ISO3 names of the countries you'd like to plot in red

malDF <- data.frame(country = c("DEU", "COD", "BFA"),
  malaria = c(1, 1, 1))
# malDF is a data.frame with the ISO3 country names plus a variable to
# merge to the map data

malMap <- joinCountryData2Map(malDF, joinCode = "ISO3",
  nameJoinColumn = "country")
# This will join your malDF data.frame to the country map data

mapCountryData(malMap, nameColumnToPlot="malaria", catMethod = "categorical",
  missingCountryCol = gray(.8))
# And this will plot it, with the trick that the color palette's first
# color is red

EDIT: Add other colors and include picture

## Create multiple color codes, with Burkina Faso in its own group
malDF <- data.frame(country = c("DEU", "COD", "BFA"),
  malaria = c(1, 1, 2))

## Re-merge
malMap <- joinCountryData2Map(malDF, joinCode = "ISO3",
  nameJoinColumn = "country")

## Specify the colourPalette argument
mapCountryData(malMap, nameColumnToPlot="malaria", catMethod = "categorical",
  missingCountryCol = gray(.8), colourPalette = c("red", "blue"))

enter image description here

Recoil answered 27/6, 2012 at 18:45 Comment(5)
thanks so much, this really helped me... still got a few of the small African countries that don't appear on the map but that shall be another days task!Anew
Do you know a possibility to make 2 groups? ie: c("DEU", "COD") in red and c("BFA") in blue?Depot
@TeYaP, I just added an example with two colorsRecoil
Do you know how should I zoom on a particular zone (eg. Europe or Africa)?Stirpiculture
@AndreaM, you can set the mapRegion argument in the mapCountryData function to something like "Africa" or use the xlim and ylim arguments to set the map extents.Recoil
I
14

Try using googleVis package and use gvisGeoMap Functions

e.g.

G1 <- gvisGeoMap(Exports,locationvar='Country',numvar='Profit',options=list(dataMode='regions'))

plot(G1)
Ida answered 27/6, 2012 at 13:19 Comment(1)
Wow, I never realized how powerful googleVis is! Very simple syntax, no need to worry about spatialPointsDataFrame's, and the output is beautiful!Shebat
D
11
    library(maptools)
    data(wrld_simpl)
    myCountries = wrld_simpl@data$NAME %in% c("Australia", "United Kingdom", "Germany", "United States", "Sweden", "Netherlands", "New Zealand")
    plot(wrld_simpl, col = c(gray(.80), "red")[myCountries+1])

enter image description here

Decennial answered 12/9, 2017 at 10:3 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.