2016-01-31 17 views
7

L'affascinante tabella sottostante è nell'economista , 30 gennaio 2016 a 61. L'immagine mostra le esportazioni di gas naturale liquefatto (LNG) da cinque regioni a sei regioni. In che modo R può disegnare qualcosa di simile ad esso, forse con diversi diagrammi di Sankey (dal pacchetto riverplots) ma con le frecce invertite come le punte delle frecce raffigurate? Significa che i flussi nella regione di esportazione mostrerebbero come uscire.Sovrapponi più schemi fluviali (diagrammi di Sankey) su una mappa del mondo

Economist map with flows

Estrarre i dati dal terreno da bulbo oculare provocato la cornice dati df. Le variabili hanno nomi strani perché il `riverplot richiede nomi di nodi univoci.

> dput(df) 
structure(list(ID = structure(c(1L, 6L, 9L, 13L, 2L, 7L, 14L, 
3L, 10L, 15L, 4L, 11L, 5L, 8L, 12L, 16L), .Label = c("Africa-Asia", 
"Africa-Europe", "Africa-Nam", "Africa-SE", "Africa-SthAm", "Europe-Asia", 
"Europe-Europe", "Europe-SthAm", "MidEast-Asia", "MidEast-NthAm", 
"MidEast-SE", "MidEast-SthAm", "SE Asia-Asia", "Sth Am.-Eur", 
"Sth Am.-NthAm", "Sth Am.-SthAm"), class = "factor"), x = c(-30, 
1, 20, 100, -30, 1, -100, -30, 20, -100, -30, 20, -30, 1, 20, 
-100), y = c(120, 120, 120, 120, 1, 1, 1, -120, -120, -120, 100, 
100, -100, -100, -100, -100), value = c(21, 22, 290, 100, 22, 
3, 16, 1, 5, 6, 2, 62, 3, 3, 5, 3), col = structure(c(2L, 3L, 
5L, 1L, 2L, 3L, 4L, 2L, 5L, 4L, 2L, 5L, 2L, 3L, 5L, 4L), .Label = c("brickred", 
"green", "purple", "red", "yellow"), class = "factor"), region = structure(1:16, .Label = c("Asia-Africa", 
"Asia-Eur", "Asia-ME", "Asia-SE", "Europe-Africa", "Europe-Eur", 
"Europe-SthAm", "No. Am.-Africa", "No. Am.-ME", "No. Am.-Stham", 
"SE Asia-Afr", "SE Asia-MI", "Sth. Am.-Africa", "Sth. Am.-Eur", 
"Sth. Am.-ME", "Sth. Am.-SthAm"), class = "factor")), .Names = c("ID", 
"x", "y", "value", "col", "region"), row.names = c(NA, -16L), class = "data.frame") 

Creazione della mappa è semplice (anche se sarebbe meglio con l'Antartide sciolto!). Tru, l'obiettivo non è un coropleto - con regioni colorate secondo alcune variabili - ma il pacchetto choroplethr di Ari Lamstein e il suo complemento, choroplethrMaps, creano facilmente una mappa del mondo.

library(choroplethr) 
library(choroplethrMaps) # to obtain a map of the world 
library(ggplot2) 
library(riverplot) 

data(country.map)   # choose a world map 
world <- ggplot(country.map, aes(long, lat, group=group)) + 
    geom_polygon(fill = "grey10") + 
    theme_bw() 

outline map of countries

Ma la riverplot me sventato, e anche se avessi avuto una trama complessiva di lavoro, c'è il codice per fare quattro di loro (uno per ogni regione esportazione di GNL) e sovrapporre la mappa del mondo?

nodes.df <- df 
nodes.df$ID <- capwords(as.character(nodes.df$ID)) 
nodes.df$ID <- as.factor(nodes.df$ID) 

edges.df <- df 
edges.df <- setNames(edges.df, c("ID", "N1", "N2", "Value", "Color", "Region")) 

edges.df <- df[ , c("region", "x", "y", "value", "col", "region")]   # use different ID names 
edges.df <- setNames(edges.df, c("ID", "N1", "N2", "Value", "Color", "Region")) 


river <- makeRiver(nodes = nodes.df, edges = edges.df, node_labels = NULL, 
        node_xpos = nodes.df$x, node_ypos = nodes.df$y) 

Error in checkedges(edges, nodes$ID) : 
    edges must not have the same IDs as nodes 
+5

Hanno usato Illustrator per realizzare la propria trama. A volte devi ricorrere a quello. – hrbrmstr

+2

Bene, se tu, @hrbrmstr, non vedi il modo di farlo con R, allora ti ringrazio per averlo considerato e ritirato la mia domanda. :) Comunque, mi piace il grafico che Illustrator ha creato. – lawyeR

+0

@lawyeR conoscesti la soluzione per questo? –

risposta

0

è possibile creare le tabelle Sankey separatamente, salvarle come PNG, li reimportare e incollarli sopra la mappa con grid.raster. È laborioso come farlo con Illustrator, ma almeno è programmatico (ad esempio, pronto per gli aggiornamenti dei dati). Lo abbiamo già fatto nel mio lavoro quando avevamo bisogno di combinare i grafici di Sankey con altre grafiche come questa.