Mapa interactiu (leaflet)

En aquest apartat crearem un mapa interactiu amb el paquet leaflet. En concret, aprendrem a:

A part de leaflet, en els següents exercicis utilitzarem altres paquets que carreguem a continuació.

#recordeu que els paquets han d'estar prèviament instal·lats
library(htmlwidgets)
library(leaflet)
library(tidyverse)
library(RColorBrewer)

Crear i centrar un mapa

Per crear un mapa amb leaflet només hem d’introduir la funció següent:

leaflet() %>%
  addTiles()

Si executeu el codi, veureu que R ens retorna un mapamundi buit. L’únic que podem fer és ampliar i reduir el mapa. Normalment quan creem un mapa volem centrar l’atenció en una regió concreta del món. El següent pas que farem, doncs, serà indicar la zona del mapa que mostrarem per defecte. Per centrar el mapa en una zona concreta, ho podem fer de dues maneres:

  • Escollint el centre: Necessitarem introduir les coordenades d’un únic punt, que serà el centre del mapa.
  • Escollint els límits: Necessitarem introduir quatre coordenades: els límits nord, sud, est i oest del mapa.

Centre del mapa

Per escollir el centre del mapa utilitzarem la funció setView(), on introduirem tres arguments:

  • Longitud (lng)
  • Latitud (lat)
  • Zoom (zoom)
leaflet() %>%
  addTiles() %>%
  setView(lng = 138.727424, 
          lat = 35.362465, 
          zoom = 11)

Límits del mapa

Per escollir els límits del mapa utilitzarem la funció fitBounds(), on introduirem quatre arguments:

  • Longitud1 (lng1): El límit oest.
  • Latitud1 (lat1): El límit sud.
  • Longitud2 (lng2): El límit est
  • Latitud2 (lat2): El límit nord.
leaflet() %>%
  addTiles() %>%
  fitBounds(lng1 = 2.171,
            lat1 = 41.32,
            lng2 = 2.179,
            lat2 = 41.48) 

Seleccionar un tipus de mapa

Per tipus de mapa entenem el mapa base sobre el qual operem. Hi ha varis proveïdors que ens poden proporcionar aquest mapa base. En aquest enllaç teniu vàries desenes de mapes per escollir. Amb leaflet podem conformar-nos amb el mapa que tenim per defecte o bé seleccionar-ne un altre mitjançant la funció addProviderTiles(), que posarem en el codi en substitució de addTiles(). Els tipus de mapes estan emmmagatzemats a l’objecte providers, que podem consultar si teclegem names(providers).

Proveu d’executar els dos següents codis. Veureu que hem demanat la visualitazió d’una muntanya i d’una ciutat.

#Fuji
leaflet() %>% 
  addProviderTiles(providers$Esri.NatGeoWorldMap) %>%
    setView(lng = 138.727424, 
          lat = 35.362465, 
          zoom = 10)
#Tokyo
leaflet() %>% 
  addProviderTiles(providers$Stamen.Toner) %>%
    setView(lng = 139.753930, 
          lat = 35.682170, 
          zoom = 13)

Exercici 1: Definiu amb leaflet la visualització d’un mapa on hi figuri alguna localització d’Àfrica.

  • Coordenades: Podeu obtenir fàcilment les coordenades entrant a Google Maps i clicant de manera sostinguda en un punt del mapa. Us apareixerà la informació de la longitud i la latitud.
  • Tipus de mapa: Consulteu el tipus de mapa amb names(providers). Us recomanem provar els mapes “Esri,” alguns de la saga “CartoDB,” com “CartoDB.PositronNoLabels,” o bé “Stamen.Toner” si voleu visualitzar una ciutat. És possible que alguns mapes necessitin un zoom més allunyat perquè els pugueu visualtizar bé.

COMPTE AMB EL ZOOM!: Comença primer amb una resolució baixa (per exemple, zoom = 6) per assegurar-te que no estiguis carregant un mapa amb massa resolució. Després augmenta la resolució a 7, 8, 9 … per anar guanyant nitidesa. Com més resolució, més lent anirà el teu ordinador al carregar el mapa.

Un resum del que hem vist fins ara el trobem en el següent vídeo:

Font: Datacamp

Introduir dades al mapa

Per introduir dades al mapa utilitzarem la base de dades de Correlates of War Militarized Interstate Dispute Locations (v2.1) (Braithwaite 2010; Bezerra and Braithwaite 2019). A la seva pàgina web hi ha un arxiu zip que emmagatzema dos datasets:

  • MIDLOC-A v2.1: Conté informació de disputes militars produïdes entre 1816 i 2010. La unitat d’anàlisi és l’inici de la disputa militar. Per tant, la geolocalització mostra el lloc de l’inici de la disputa, encara que després s’hagin pogut produir incidents en altres llocs.
  • MIDLOC-I v2.1: Conté informació de disputes militars produïdes entre 1993 i 2010. La unitat d’anàlisi és l’incident de la disputa militar. Per tant, la geolocalització mostra el lloc de cada incident. Una disputa militar pot tenir varis incidents, entre ells l’incident que va iniciar la disputa.

Si apliqueu el codi següent descarregarem l’arxiu MIDLOC_2.1.zip al directori de treball, el descomprimirem i llegirem l’arxiu MIDLOCA_2.1.csv, que convertirem en l’objecte d’R mida. Les 20 primeres observacions es mostren a la Taula 1.

download.file("https://correlatesofwar.org/data-sets/MIDLOC/midloc_2-1.zip/@@download/file/MIDLOC_2.1.zip", "loc.zip")
unzip("loc.zip")
mida <- read_csv("MIDLOCA_2.1.csv")
head(mida, 20)
Table 1: Base de dades MIDLOC v2.1
yeardispnummidloc2_locationmidloc2_measuringpointmidloc2_xlongitudemidloc2_ylatitudemidloc2_precisionmidloc2_howobtainedmidloc2_precision_commentmidloc2_general_commentpriogrid_cellmidloc11_locationmidloc11_midlocmeasuringpointmidloc11_latitudemidloc11_longitudemidloc11_precision
19022Canada-United States (Alaska [ADM1]) BorderMidpoint of shared (subnational) border-138.6700059.82835ArcGIS and GADMPoint along a lineNA215363Alaska-Canadian borderJuneau, Alaska58.5092-134.68904
19133Austria-Yugoslavia BorderMidpoint of shared (national) border14.9110046.62235ArcGIS and cShapesPoint along a lineUses 1955 data196950Austria’s border with SerbiaBelgrade, Yug44.811920.46564
19464Straits of CorfuStraits of Corfu19.9700039.77003latlong.netStraitNA186880Corfu ChannelKerkira, GRC39.6219.91974
19517Suez CanalTimsah Lake32.2909030.57355latlong.netPoint along a lineNA173945Suez canal zoneSuez canal, UAR29.916732.55004
18568Tehran, IranTehran, Iran51.3890035.68928latlong.netCapitalNA181183IranTehran, IRN35.671951.42445
18899Mozambique Territorial WatersCentroid of territorial waters36.97040-18.19183ArcGIS and Marine RegionsTerritorial watersNA103394Waters off MozambiqueMaputo-25.965332.58924
193811Austria-Germany BorderMidpoint of shared (national) border9.5993247.53195ArcGIS and cShapesPoint along a lineUses 1955 data198380Austrian BorderVienna48.216.36674
193812Czechoslovakia-Germany BorderMidpoint of shared (national) border12.6784050.41395ArcGIS and cShapesPoint along a lineUses 1955 data201986NAger-cze border50.513.00004
186313Japan Territorial WatersSouthernmost point of territorial waters135.5920034.04055ArcGIS and Marine RegionsPoint along a lineNA179192NAS. japanese waters32.13129.78005
189514ConstantinopleIstanbul, Turkey28.9784041.00821latlong.netPrecise location textNA189058ConstantinopleIstanbul, TUR41.018628.96471
183915Canada (New Brunswick [ADM1])-United States (Maine [ADM1]) BorderMidpoint of shared (subnational) border-67.7833046.45985ArcGIS and GADMPoint along a lineNA196065Maine-New Brunswick BorderFredericton, CAN45.95-66.63333
189716Japan-South Korea Border (Territorial Waters)Midpoint of shared (territorial water) border129.1430034.76725ArcGIS and Marine RegionsPoint along a lineNA179899NAstraits between jap and kor35.33130.38005
184819AUH-Venetian BorderMidpoint of shared (national) border11.9700046.83005MIDLOC1.1Point along a lineNA196944NAmd point of venetian-auh border46.8311.97004
194520Iran (Northern [> ADM1])Centroid of > ADM152.3760036.11175ArcGIS and GADM> ADM1NA181905Northern IranArdebil, Iran38.249448.30143
191221AUH-Serbia BorderMidpoint of shared (national) border19.0000045.89005MIDLOC1.1Point along a lineNA195519NAmd point of serb-auh border45.8919.00004
194022Riga, LatviaRiga, Latvia24.1052056.94968latlong.netCapitalNA211369LatviaRiga, Latvia56.9524.10005
193923Estonia-Russia BorderMidpoint of shared (national) border27.5080058.53145ArcGIS and cShapesPoint along a lineUses 1991 data214256Soviet/Estonian borderMerimae, Estonia57.695627.46084
183125Belgium-Netherlands BorderMidpoint of shared (national) border5.7297051.19305ArcGIS and cShapesPoint along a lineUses 1946 data203412NAmd point of NTH-BEL border51.425.27904
194826Berlin, GermanyBerlin, Germany13.4050052.52001latlong.netPrecise location textNA205587.berlin52.5213.38001
196127Berlin, GermanyBerlin, Germany13.4050052.52001latlong.netPrecise location textNA205587.berlin52.5213.38001

Exercici 2: Examina el marc de dades mitjançant les funcions head() i glimpse(). Si tecleges head(mida) veuràs les primeres sis observacions i glimpse(mida) et permetrà veure el marc de dades de forma vertical. Respon a les següents preguntes, ajudant-te també del llibre de codis que trobaràs a dins l’arxiu que has descomprimit:

  • Quina és la unitat d’anàlisi del marc de dades?
  • A quines columnes es troben les coordenades del conflicte?
  • Quina informació substantiva addicional hi ha sobre cada conflicte?
  • Quin és el significat de la variable midloc11_precision?

Com veieu en el següent codi, incorporar un marc de dades amb leaflet és molt senzill: només cal començar el codi amb el nom del marc de dades seguit de la pipe %>% i a continuació introduir el codi que ja hem treballat prèviament.

  • Per afegir els punts al mapa utilitzarem la funció addCircleMarkers(), que requereix dos arguments: la longitud lng i la latitud lat. Aquí haurem d’especificar el nom de les variables on es troben les coordenades del marc de dades que volem representar (l’objecte mida, en el nostre cas).
  • El mapa quedarà automàticament enquadrat per mostrar totes les dades. Si volem una vista més específica, haurem d’introduir les funcions setView() o fitBounds() com ja hem vist anteriorment.
mida %>%
  leaflet() %>%
  addTiles() %>%
  addCircleMarkers(lng = ~??????????, 
                   lat = ~??????????)

Exercici 3: A partir de l’exploració del marc de dades mida que has fet a l’exercici anterior, crea una visualització com la que tens a continuació.

  • Per poder visualitzar les dades correctament, substitueix els interrogants del codi pel nom de la variable que correspongui la longitud lng i latitud lat.
  • No eliminis el símbol ~: ha de precedir el nom de la variable.
  • Pots controlar el gruix dels punts si afegeixes a dins de la funció addCircleMarkers() l’argument radius, per exemple radius = 1.
  • Fes una ullada al mapa i investiga la localització dels punts. Hi trobes algún patró? On se situa normalment l’origen dels conflictes?

Posar etiquetes

El mapa que acabem de veure conté 2315 punts, corresponent a totes les observacions del marc de dades mida. Això significa una quantitat massa gran d’informació visual. Per poder crear un mapa més atractiu serà més adequat centrar-nos amb només algunes observacions del marc de dades i visualitzar conflictes concrets amb diferents colors i etiquetes que ens permetran distingir la informació que volem reproduir.

A continuació hem volgut visualitzar els conflictes emplaçats geogràficament a Estats Units i distingir-los en funció de l’any que s’han produït. En el codi que trobareu més avall hem fet les operacions següents:

  • Color: La manera com distingirem visualment l’any que s’han produït les disputes serà amb el color dels punts, que variarà en funció de si la disputa s’ha produït recentment o no. En primer lloc, doncs, determinem el color creant pal_num. Com que la variable any (year) és una variable numèrica, utilitzarem la funció colorNumeric(), on indiquem la paleta i els valors de la variable.
  • País: A la variable mida$midloc2_location apareixen els noms de les zones geogràfiques. Hem filtrat el marc de dades per conservar només les observacions on hi aparegui la paraula “United States.”
  • Punt: A addCircleMarkers() hem indicat les coordenades i també tres arguments més: color, popup i label.
    • Cada punt del mapa prendrà un color diferent segons la variable year.
    • Quan pitgem el cercle ens apareixerà un popup amb la informació de la localització, que es troba emmagatzemada a midloc2_location.
    • Quan el punter passi per sobre del punt apareixerà l’any.
  • Llegenda: Finalment, afegim una llegenda amb addLegend(), on indiquem els arguments pal, values, position, title i opacity.
    • Indiquem la paleta de colors pal_num.
    • Indiquem els valors mínim i màxim associats als colors.
    • Opcionalment, podem indicar la posició que ocuparà la llegenda en el mapa, el títol i la opacitat (si eliminem aquests arguments ens mostrarà els valors per defecte).
pal_num <- colorNumeric(palette = "viridis", #la paleta, podeu canviar-la per "Blues", "OrRd", etc.
                        domain = mida$year, #indiquem que els colors s'han d'adaptar als valors de la variable year
                        reverse = TRUE) #canvieu a FALSE per posar els colors de la paleta en ordre invers

mida %>%
  filter(str_detect(midloc2_location, "United States")) %>% #Busquem el nom d'un país a la variable midloc2_location
  leaflet() %>%
  addTiles() %>%
  addCircleMarkers(lng = ~midloc2_xlongitude, lat = ~midloc2_ylatitude,
             color = ~pal_num(year), #el color del punt representarà la variable year
             popup = ~midloc2_location, #amb aquest argument especifiquem que clicant al punt ens aparegui un popup amb la informació de la localització emmagatzemada a midloc2_location
             label = ~year) %>% #quan el punter passi per sobre del punt apareixerà l'any
  addLegend(pal = pal_num, #paleta de colors
            values = c(min(mida$year):max(mida$year)), #valor mínim i màxim
            position = "bottomleft", #posició de la llegenda
            title = "Any", #títol
            opacity = 0.8) #transparència de la llegenda

Exercici 4: Examina a fons com està construït el codi anterior. A partir de la informació proporcionada, crea un mapa semblant amb les següents modificacions:

  • Tria una paleta de colors diferent a la proposada a l’exemple de la gamma RColorBrewer o la gamma Viridis.
  • Canvia el nom del país. Pots consultar la llista de localitzacions amb unique(mida$midloc2_location).
  • Intercanvia les variables del popup i la label, de manera que la variable que apareix a popup estigui a label i la que apareix a label estigui a popup. Comprova les diferències en el mapa.
  • Canvia l’opacity de la llegenda. Comprova les diferències en el mapa.
  • Si ho creus necessari, canvia la llegenda de posició. Trobaràs informació de les diferents posicions a ?addLegend.

Amb leaflet també tenim l’opció de visualitzar variables categòriques. En aquest cas, com que year és una variable numèrica, la convertirem a categòrica abans de procedir:

  • En primer lloc, hem creat l’objecte mida_year, on filtrem per un altre país, en aquest cas Germany. També hem creat la nova variable year_lim, que prendrà dos valors: “Després de 1919” i “Abans de 1919.”
  • En segon lloc, hem creat un color de paleta categòrica amb la funció colorFactor().
    • Podem crear els colors mitjançant una paleta preestablerta, com mostrem amb el codi que crea l’objecte pal_fact1.
    • O bé podem crear els colors indicant els seus noms, com mostrem amb el codi que crea l’objecte pal_fact2.
  • Finalment, repetim el procediment anterior adaptant el codi a les noves modificacions.
mida_year <- mida %>%
  filter(str_detect(midloc2_location, "Germany")) %>% #Busquem el nom d'un país a la variable midloc2_location
  mutate(year_lim = if_else(year > 1919, "Després de 1919", "Abans de 1919")) #creem una variable categòrica

pal_fact1 <- colorFactor(palette = "Accent", domain = mida_year$year_lim)
pal_fact2 <- colorFactor(palette = c("red", "blue"), domain = mida_year$year_lim) #també podem posar els noms dels dos colors

mida_year %>%
  leaflet() %>%
  addTiles() %>%
  addCircleMarkers(lng = ~midloc2_xlongitude, lat = ~midloc2_ylatitude, 
             popup = ~midloc2_location, 
             color = ~pal_fact1(year_lim), #podem canviar la paleta per pal_fact2 
             label = ~year) %>%
  addLegend(position = "bottomright", pal = pal_fact1, #podem canviar la paleta per pal_fact2
            values = c("Després de 1919", "Abans de 1919"), #les etiquetes han de coincidir amb les que hem definit prèviament
            opacity = 0.6)

Exercici 5: Us heu fitxat que hi ha varis punts ubicats molt lluny d’on ubicaríem normalment Alemanya? Comprova que aquests punts siguin correctes.

  1. Necessitaràs saber el número de disputa que té associat cada un dels punts. Ho pots consultar amb el següent codi:
filter(mida, year < 1919, str_detect(midloc2_location, "Germany")) %>%
   head(20)
  1. Un cop tinguis localitzats els números de disputa, hauràs de consultar la descripció de la disputa en el llibre International Conflicts, 1816-2010: Militarized Interstate Dispute Narratives. Fes una descripció de la disputa a partir de la informació que trobis i treu les conclusions pertinents.

Exercici 6: A partir de la informació proporcionada en el codi que hem utilitzat per crear el gràfic anterior, crea un mapa semblant amb les següents modificacions:

  • Substitueix el país per un país de la regió MENA. Pots consultar la llista de localitzacions amb unique(mida$midloc2_location).
  • Canvia l’any que fa de llindar entre les dues categories de la variable year. Tingues en compte que per canviar-ho hauràs de fer cinc modificacions al codi.
  • Selecciona un altra paleta de color.
    • Si fas servir l’objecte pal_fact1 pots trobar altres paletes a RColorBrewer. Assegura’t d’escollir una paleta qualitativa.
    • Si fas servir l’objecte pal_fact2 pots escollir dos colors qualssevol. Tingues en compte que, en aquest cas, hauràs de substitutir més avall el codi que aparegui pal_fact1 per pal_fact2.

Exercici final

Quan hem examinat la base de dades Militarized Interstate Dispute Locations (v2.1) hem pogut comprovar que conté pocs detalls sobre cada conflicte. Els detalls estan emmagatzemats en altres bases de dades de Correlates of War, en especial la Militarized Interstate Disputes (v4.3) (Palmer et al. 2020), que conté informació detallada sobre cada disputa militar.

  • Descarreguem l’arxiu MID (v4.3) i descomprimim el zip.
download.file("https://correlatesofwar.org/data-sets/MIDs/incident_level_4-3-1.zip/@@download/file/Incident_Level_4.3.zip#", "Incident.zip")
unzip("Incident.zip")
  • Recordeu que anterioment havíem descarregat un arxiu zip contenia dos arxius CSV amb dades de geolocalització: MIDLOCA_2.1.csv i MIDLOCI_2.1.csv. Fins ara hem treballat amb el primer, que tenia com a unitat d’anàlisi l’inici de la disputa militar. Ara treballarem amb el segon marc de dades, que té com a unitat d’anàlisi cada incident de la disputa militar.
  • En el següent codi hem convertit l’arxiu MIDLOCI_2.1.csv en el marc de dades midiloc.
  • Després hem convertit l’arxiu MIDI 4.3.csv en el marc de dades midi.
  • Finalment, hem pogut ajuntar els dos marcs de dades en un de nou que anomenem midi_join i visualitzem a la Taula 2.
midiloc <- read_csv("MIDLOCI_2.1.csv")
midi <- read_csv("MIDI 4.3.csv")
midi_join <- midi %>%
  left_join(midiloc, by = c("incidnum3" = "incidnum"))
Table 2: MIDLOC i MIDI
dispnum3incidnum3dispnum4incidnum4stdaystmonstyearenddayendmonendyeardurationtbifatalityfatalpreactionhostlevnumarevtype1revtype2versionyeardispnummidloc2_locationmidloc2_measuringpointmidloc2_xlongitudemidloc2_ylatitudemidloc2_precisiononsetmidloc2_howobtainedmidloc2_precision_commentmidloc2_general_commentpriogrid_cellmidloc11_locationmidloc11_midlocmeasuringpointmidloc11_latitudemidloc11_longitudemidloc11_precision
35513551001-9-9167199216719921129007313204.319923551Yugoslavia Territorial WatersCentroid of territorial waters18.913642.048631ArcGIS and Marine RegionsTerritorial watersNA190478NApetrovac42.200018.91674
35513551002-9-92111199224919961404-9001349204.319923551UnspecifiedNANANA-990NALocation unclear or unspecifiedNANA.NANANA7
35513551003-9-9-911993-911993-9-900733204.319933551Yugoslavia Territorial WatersCentroid of territorial waters18.913642.048630ArcGIS and Marine RegionsTerritorial watersNA190478Adriatic Coast, YUGpetrovac42.200018.91674
35513551004-9-91411993-911993-91600731204.319933551Adriatic SeaAdriatic Sea17.290341.855150latlong.netSeaNA189755Adriatic Seaadriatic sea43.000016.00005
35513551005-9-93011993301199314001541204.319933551Danube RiverMidpoint of river20.325945.094150ArcGIS and Natural Earth DataPoint along a lineNA194801Danube River, YUG sectorzemun44.833320.41674
35513551006-9-9321993321993125001541204.319933551Danube RiverMidpoint of river20.325945.094150ArcGIS and Natural Earth DataPoint along a lineNA194801Danube Riverzemun44.833320.41674
35513551007-9-92821993282199314300121204.319933551Yugoslavia (Kosovo [> ADM1])Centroid of > ADM120.875542.565950ArcGIS and GADM> ADM1NA191202Kosovo province, YUGkosovo42.583321.00005
35513551008-9-91241993124199311900733204.319933551BosniaCentroid of ADM017.786544.168160ArcGIS and cShapesStateNA193356safe areas of BOSsrebrenica44.100019.28333
35513551009-9-91519931111993185170001341204.319933551Yugoslavia Territorial WatersCentroid of territorial waters18.913642.048630ArcGIS and Marine RegionsTerritorial watersNA190478The 12 mile area of Yugoslavia’s territorial waters in the Adriatic.petrovac42.200018.91672
35513551010-9-918101993181019931-900121204.319933551UnspecifiedNANANA-990NALocation unclear or unspecifiedNANANANANANA7

Exercici 7: Examineu el marc de dades amb head(midi_join) i glimpse(midi_join). Responeu a les següents preguntes:

  • La variable dispnum3 es refereix al codi que rep una disputa militar. Fes una consulta al llibre International Conflicts, 1816-2010: Militarized Interstate Dispute Narratives i descriu breument dues disputes que et cridin l’atenció. Associa-les amb el seu corresponent codi.
  • Fixa’t que en moltes cel·les apareix el valor -9. Sabries explicar què significa?
  • Busca al llibre de codis el significat de les variables hostlev, tbi, fatality, action i numa.

Amb les dades dels dos marcs de dades tenim molta més informació sobre els conflictes que podem desplegar en un mapa. Per exemple, en el següent mapa hem visualitzat la variable hostlev. Malauradament, no sabem el significat dels seus valors ja que estan codificats en numèric.

EXERCICI FINAL: L’objectiu d’aquesta última activitat és construir un mapa semblant al que acabem de visualitzar, però focalitzat en un sol conflicte i visualment més atractiu. Per a això farem els següents procediments al codi incomplet que trobareu més avall:

  1. Consulta al llibre de codis el significat de les categories de la variable hostlev. Reanomena les categories fent l’equivalència amb els valors antics.
  2. Tria la paleta de color amb palette i, si s’escau, la direcció de la paleta amb reverse. Tingues en compte que els colors de la paleta han de ser qualitatius1.
  3. Escull un conflicte del llibre International Conflicts, 1816-2010: Militarized Interstate Dispute Narratives i afegeix el codi de la disputa a dins de la funció filter().
  4. Selecciona un mapa amb què es puguin visualitzar bé els punts.
  5. Estableix les característiques dels punts com la mida o el tipus de punt.
  6. Emplaça la llegenda a un cantó que no impedeixi visualitzar els punts del mapa, selecciona l’opacitat i posa un títol.
midi_join$hostlev <- fct_recode(as.factor(midi_join$hostlev), #(1) busca els noms de hostlev
                                "?????????????" = "1", 
                                "?????????????" = "2",
                                "?????????????" = "3", 
                                "?????????????" = "4", 
                                "?????????????" = "5")

pal_midi <- colorFactor(palette = "????", #(2) selecciona paleta
                        domain = midi_join$hostlev, 
                        reverse = FALSE) #(2)tria l'ordre dels colors reverse TRUE o FALSE

midi_join %>%
  filter(dispnum3 == ????) %>% #(3) afegeix el codi de la disputa
  leaflet() %>%
  addProviderTiles(providers$?????????????) %>% #(4) selecciona el mapa
  addCircleMarkers(lng = ~midloc2_xlongitude, 
                   lat = ~midloc2_ylatitude,
                   radius = 6, #(5)estableix la mida dels punts
                   fill = TRUE, #(5)un punt TRUE, una rodona FALSE
                   popup = ~paste0("<b> Any d'inici: </b>", midi_join$styear, "<br>",
                                   "<b> Nivell d'hostilitats: </b>", midi_join$hostlev),
                   color = ~pal_midi(hostlev),
                   label = ~midloc2_location) %>%
  addLegend(title = "??????????????", #(6)posa un títol curt a la llegenda
            position = "????????????", #(6)selecciona la posició de la llegenda
            pal = pal_midi, 
            values = levels(midi_join$hostlev),
            opacity = 0.9) #(6)escull l'opacitat de la llegenda

Si voleu veure exemples de mapes molt semblants als que acabeu de crear:

Bibliografia

Bezerra, P., and A. Braithwaite. 2019. Codebook for the Militarized Interstate Dispute Location (MIDLOC-A/I) Dataset, v2.1.
Braithwaite, A. 2010. MIDLOC: Introducing the Militarized Interstate Dispute (MID) Location Dataset.” Journal of Peace Research 47 (1): 91–98.
Palmer, Glenn, Vito D’Orazio, Michael R. Kenwick, and Roseanne W. McManus. 2020. Updating the Militarized Interstate Dispute Data: A Response to Gibler, Miller, and Little.” International Studies Quarterly 64 (2): 469–75.

  1. Si executes la funció display.brewer.all(), el primer bloc de paletes són colors sequencials, el segon bloc són qualitatius i el tercer bloc són divergents↩︎

Previous
Next