2017-08-07 2 views
3

Je voudrais visualiser mes données en utilisant une carte du monde dans R, où des étiquettes doivent être ajoutées à certains points (coordonnées données). Les étiquettes doivent être des rectangles 3D avec des hauteurs proportionnelles à la valeur de la table de données. J'utiliserais le "paquet" du paquet R (ou toute alternative, si c'est mieux). Il y a environ 10 à 15 points dans le monde, et il y a deux valeurs pour chaque emplacement (en particulier, les points sont les emplacements des principaux gisements de pétrole, et les valeurs sont, par exemple, la taille et les réserves). Je veux avoir deux rectangles 3D pour chaque point, disons, rouge et bleu se tenant près les uns des autres, avec des hauteurs appropriées, et des nombres sur eux, et chaque point doit être étiqueté avec le nom du champ de pétrole. J'ai trouvé la solution avec le paquet de dépliant, ajoutant des cercles à la carte avec le rayon approprié.Création d'une carte de dépliant avec des étiquettes personnalisées dans R

Les données et les bibliothèques sont chargées par le code:

library(leaflet) 
basins<-read.csv("somedata.csv") 

Et somedata.csv a la structure suivante (quatre lignes de données seulement comme exemple de travail minimum):

basin,lat,lon,res.density,rel.area 
Central Sumatra,1,96,16.7,75 
North Sea,58.4,2,20,24 
Maracaibo basin,9,-71,74.4,14.3 
Los Angeles,33,-118,31.2,32 

Le cercle inscriptibles carte est invoquée par la commande

m=leaflet(data = basins) %>% addTiles() %>% addCircleMarkers(~lon, ~lat , popup = ~as.character(basin),radius=~res.density*0.4,label=~htmlEscape(basin),labelOptions=labelOptions(noHide=T,textOnly=TRUE,direction="bottom")) 

Cependant cette solution n'est pas si bon, car il ne permet pas de visualiser la deuxième valeur (via l'argument radius = ~ res.density, où res.density est le nom de la première valeur pour le bassin dans ma table .csv).

Je voudrais reproduire quelque chose qui ressemble à cette image, qui a été produite par GMT. Il suffirait d'avoir une carte (2D) simple, cependant deux de ces rectangles sont nécessaires pour chaque point, avec le nom du champ et les valeurs pour chaque rectangle.

Image de package GMT

enter image description here

Répondre

6

Vous pouvez ajouter le graphique à barres avec l'aide du paquet leaflet.minicharts comme suit:

library("leaflet") 
library("htmltools") 
library("leaflet.minicharts") 

basins <- read.table(text="basin,lat,lon,res.density,rel.area 
Central Sumatra,1,96,16.7,75 
North Sea,58.4,2,20,24 
Maracaibo basin,9,-71,74.4,14.3 
Los Angeles,33,-118,31.2,32", header=T, sep=",") 

leaflet(data = basins) %>% 
    addProviderTiles("OpenStreetMap.Mapnik") %>% 
    addLabelOnlyMarkers(lng = ~lon, lat = ~lat, label = ~htmlEscape(basin), 
         labelOptions = labelOptions(noHide = TRUE, textOnly = TRUE, 
                direction = "bottom", offset = c(0,5))) %>% 
    addMinicharts(basins$lon, basins$lat, type = "bar", 
       chartdata = basins[, c("res.density", "rel.area")], width = 50, height = 60) 

Peut-être, vous pouvez laisser les addCircleMarkers pour la simplicité.

enter image description here

+0

C'est un excellent package. Est-il possible d'ajuster la légende pour qu'elle donne les explications personnalisées, et pas seulement les noms des variables? La documentation leaflet.minicharts ne mentionne pas cette option. Bien sûr, on peut ajouter une légende manuellement avec%>% addLegend, mais la légende appropriée des minicharts est stylistiquement bonne à sa place – astrsk

+0

A partir du paquet docs, l'argument addMinicharts a la possibilité d'ajuster la position de la légende. Si vous voulez une chaîne différente dans la légende, vous pouvez simplement changer les noms de vos colonnes. Sinon, optez pour addLegend. –