Les données viennent d'Eurostat et ont été récupérées via le package eurostat
. Les contours géographiques viennent également d'Eurostat.
Pour pouvoir construire un cartogramme, les données doivent être au format sf
et contenir une variable numérique ne contenant pas de valeurs manquantes ni de 0 pour déformer les formes géographiques !
# Packages ---------------------------------------------------------------- library(topogram) library(sf) library(eurostat) library(dplyr) # Eurostat data ----------------------------------------------------------- eu_wine <- get_eurostat(id = "apro_cpb_wine", stringsAsFactors = FALSE) eu_wine <- label_eurostat(eu_wine, code = "geo") # str(eu_wine) # Geographical data ------------------------------------------------------- # europe <- ne_countries(scale = 50, continent = "europe", returnclass = "sf") europe <- get_eurostat_geospatial(output_class = "sf", resolution = "10", nuts_level = 0, year = 2016) europe <- st_crop(europe, xmin = -20, ymin = 25, xmax = 35, ymax = 75) # Prepare data ------------------------------------------------------------ # Merge data europe <- europe %>% select(NUTS_NAME, id) %>% inner_join( y = eu_wine %>% filter( prod_bal == "P.D.O. - Red and rose wine", bal_item == "Gross human consumption (1000 hl)", format(time, "%Y") == "2013" ) %>% mutate(values = if_else(values == 0, 1, values)) %>% select(geo_code, name = geo, red_wine = values), by = c("id" = "geo_code") ) %>% inner_join( y = eu_wine %>% filter( prod_bal == "P.D.O. - white wine", bal_item == "Gross human consumption (1000 hl)", format(time, "%Y") == "2013" ) %>% mutate(values = if_else(values == 0, 1, values)) %>% select(geo_code, white_wine = values), by = c("id" = "geo_code") ) %>% inner_join( y = eu_wine %>% filter( prod_bal == "Red and rose wine", bal_item == "Gross human consumption per capita (lt/head)", format(time, "%Y") == "2013" ) %>% mutate(values = if_else(values == 0, 1, values)) %>% select(geo_code, red_wine_per_capita = values), by = c("id" = "geo_code") ) %>% inner_join( y = eu_wine %>% filter( prod_bal == "White wine", bal_item == "Gross human consumption per capita (lt/head)", format(time, "%Y") == "2013" ) %>% mutate(values = if_else(values == 0, 1, values)) %>% select(geo_code, white_wine_per_capita = values), by = c("id" = "geo_code") )
Dans un document markdown, on peut passer plusieurs vairables comme argument à la fonction topogram
pour ajouter un menu d\u00earoulant au-dessus du cartogramme :
topogram( shape = europe, value = list( "Total vin rouge (en milliers d'hectolitres)" = "red_wine", "Total vin blanc (en milliers d'hectolitres)" = "white_wine", "Vin rouge par habitant (litre/hab)" = "red_wine_per_capita", "Vin blanc par habitant (litre/hab)" = "white_wine_per_capita" ), n_iteration = 40, format_value = ",", d3_locale = "fr-FR", height = "600px" ) %>% add_legend( title = "", title_width = 200, orientation = "vertical", label_format = ",.2r" #.2s ) %>% add_labs( title = "Consommation de vin en Europe", subtitle = "en 2013", caption = "Source : Eurostat" )
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.