Наложение нескольких участков реки (диаграмм Санки) на карту мира

Очаровательная диаграмма ниже представлена ​​в журнале Economist, 30 января 2016 г., стр. 61. На ней изображен экспорт сжиженного природного газа (СПГ) из пяти регионов в шесть регионов. Как R может нарисовать что-то подобное, возможно, с помощью нескольких диаграмм Санки (из пакета riverplots), но со стрелками, перевернутыми как изображенные наконечники стрелок? Это означает, что потоки в экспортирующий регион будут отображаться как вытекающие.

Экономист карта с потоками

При извлечении данных из графика на глаз получился фрейм данных df. У переменных странные имена, потому что `riverplot 'требует уникальных имен узлов.

> 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")

Создать карту несложно (хотя было бы лучше, если бы Антарктида растаяла!). Тру, цель - не хороплет - с цветными областями в соответствии с некоторой переменной - а пакет Ари Ламштейна choroplethr и его дополнение choroplethrMaps легко создают карту мира.

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()

контурная карта стран

Но речной сюжет помешал мне, и даже если бы я получил общий график, есть ли код для создания четырех из них (по одному для каждого региона экспорта СПГ) и наложения их на карту мира?

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

person lawyeR    schedule 31.01.2016    source источник
comment
Они использовали Illustrator для создания своего сюжета. Иногда приходится прибегать к этому.   -  person hrbrmstr    schedule 01.02.2016
comment
Что ж, если вы, @hrbrmstr, не видите способа сделать это с помощью R, то я благодарю вас за то, что вы обдумали это и сняли мой вопрос. :) И все же мне нравится диаграмма, созданная Illustrator.   -  person lawyeR    schedule 02.02.2016
comment
@lawyeR знаете ли вы решение этой проблемы?   -  person Omar Abd El-Naser    schedule 23.03.2017
comment
@Alsqr извини нет   -  person lawyeR    schedule 25.03.2017
comment
Если вы все еще в поиске, я только что наткнулся на это: walkerke .github.io / 2016/06 / interactive-flow-visualization-i ‌ nr. Он не использует проекцию Меркатора, а скорее представляет собой трехмерный интерактивный глобус, но вы можете масштабировать интенсивности потока, и мне это кажется достаточно крутым :-p. Очевидно, это не будет заговор экономиста   -  person victor_v    schedule 18.08.2017


Ответы (2)


Вы можете создавать диаграммы Санки отдельно, сохранять их как PNG, повторно импортировать и вставлять на карту с помощью grid.raster. Это так же трудоемко, как и в Illustrator, но, по крайней мере, это программно (например, готово для обновления данных). Мы делали это раньше на моей работе, когда нам нужно было комбинировать диаграммы Санки с другой графикой, подобной этой.

person Peter Ellis    schedule 06.01.2017

Для этого вы можете использовать https://www.mapprovision.com/.

Он принимает данные, которые выглядят следующим образом, а все остальное выполняет.

Примеры данных

Вот пример:

Пример карты Санки

Здесь есть пошаговое руководство:

https://mapprovision.blogspot.com/2020/01/how-to-create-your-own-world-sankey-maps.html

  • Отказ от ответственности - я работаю в MapProvision
person Jimmy1976    schedule 29.03.2020