Reputation: 103
I am trying to plot a choropleth map in R and found some very promising code using the function plot_geo()
here: https://plot.ly/r/choropleth-maps/.
Unfortunately I could not find out how to adapt the code to my problem and I couldn’t find helpful explanations on the internet.
Here's the original code:
# specify some map projection/options
g <- list(
scope = 'usa',
projection = list(type = 'albers usa'),
showlakes = TRUE,
lakecolor = toRGB('white')
)
plot_geo(df, locationmode = 'USA-states') %>%
add_trace(
z = ~total.exports, text = ~hover, locations = ~code,
color = ~total.exports, colors = 'Purples'
) %>%
colorbar(title = "Millions USD") %>%
layout(
title = '2011 US Agriculture Exports by State<br>(Hover for breakdown)',
geo = g
)
The data I am using is a numeric value, determining the colour to fill a country, and the two-digit ISO code of all European countries. So since I want to create a map of Europe, I set scope = 'europe'
but I don’t understand what projection = list(type = 'albers usa')
does and what I need to specify instead. I just dropped it thus.
g <- list(
scope = 'europe')
I tried running the following code but the resulting map is “empty”, i.e. there is no colouring of any country.
plot_geo(data) %>%
add_trace(
z = ~value, locations = ~LAND_ISO,
color = ~value, colors = 'Purples'
) %>%
colorbar(title = "") %>%
layout(geo = g
)
My first guess was that maybe proving the ISO codes is not the proper way to specify the locations
argument. If so, what is required instead? Or do I need to set the locationmode
argument used in the code above? What would that be for Europe?
Can anyone help me with this? Thank you!
Upvotes: 6
Views: 6078
Reputation: 373
Your code seems to work for me. I created a dataframe as shown below and passed it to the code you provided above and the output I recieved was:
I expect that the issue is with the formatting of the data frame you pass to your code, check that the ISO-3 codes are strings and that the values are numeric etc.
library(plotly)
#Create dataframe with toy data:
LAND_ISO <- c("AUT","BEL","BGR","HRV","CYP","CZE","DNK","EST","FIN","FRA","DEU","GRC","HUN","IRL","ITA","LVA","LTU","LUX","MLT","NLD","POL","PRT","ROU","SVK","SVN","ESP","SWE","GBR")
value <- runif(length(LAND_ISO), 1, 10)
data <- data.frame(LAND_ISO, value)
# Run your code:
g <- list(
scope = 'europe')
plot_geo(data) %>%
add_trace(
z = ~value, locations = ~LAND_ISO,
color = ~value, colors = 'Purples'
) %>%
colorbar(title = "") %>%
layout(geo = g
)
FYI I believe
projection = list(type = 'albers usa')
just selects the projection method used to create a 2D map from a 3D globe - See https://en.wikipedia.org/wiki/Map_projection for more details.
Upvotes: 3