我有一些有关国家之间贸易的数据,我想将其绘制在世界地图上,每笔贸易一条线,以便显示每对国家之间的贸易量。另一种选择是在每对国家之间仅使用一条线路,其宽度根据国家之间的贸易数量进行调整。
该存储库(图像来自的存储库)包含一些有关如何对飞行数据执行类似操作的信息,但我无法用我的存储库执行此操作。
我的数据如下所示:
trade_data <- data.frame(origin = c("United States", "United States",
"United States", "China", "China",
"United Kingdom"),
dest = c("United States", "United States", "France",
"China","United States", "Germany"))
Run Code Online (Sandbox Code Playgroud)
我试过了:
library(rworldmap)
worldmap <- getMap()
# Add latitude and longitude to each country
trade_data <- trade_data %>%
left_join(select(as.data.frame(worldmap), NAME, LON, LAT),
by = c("origin" = "NAME")) %>%
left_join(select(as.data.frame(worldmap), NAME, LON, LAT),
by = c("dest" = "NAME"))
ggplot() +
geom_polygon(data = worldmap, aes(long,lat, group=group), fill="gray") +
geom_curve(data = trade_data, aes(x = LON.x, y = LAT.x, xend = LON.y, yend = LAT.y),
curvature = -0.2)
Run Code Online (Sandbox Code Playgroud)
我得到一个:Error in calcCurveGrob(x, x$debug) : end points must not be identical。
我尝试修改玩具数据框以删除具有相同来源和目的地的数据:
trade_data <- data.frame(origin = c("United States", "United States",
"United Kingdom", "Vietnam", "China",
"United Kingdom"),
dest = c("United Kingdom", "United Kingdom", "France",
"China","United States", "Germany"))
Run Code Online (Sandbox Code Playgroud)
但是,每两个国家之间只有一条线(不显示它们之间发生的贸易量),而且我还想显示在同一国家/地区发生的交易,并有一条线:美国 -> 美国。