Сюжет карты мира до 1990 года в R - PullRequest
0 голосов
/ 27 ноября 2018

Я работаю с некоторыми глобальными данными до 1991 года, так что до распада СССР Югославия и Чехословакия.Я хотел бы построить данные с помощью rworldmap или карт, но пакет, по-видимому, имеет доступ к современной карте мира.Все страны до 1991 года отображаются пустыми и с границами, разделяющими их аналогов после 1991 года.

Этот код создает историческую карту:

if (requireNamespace("mapdata", quietly=TRUE) && packageVersion("mapdata") >= "2.3")
 {map("mapdata::worldLores", fill = TRUE, col = 1:10)}

РЕДАКТИРОВАТЬ : также, согласно полезному комментарию ниже, шейп-файл исторической карты легко получить из:

library(cshapes)
cshp.data<-cshp(as.Date("1990-01-01"))
plot(cshp.data)

Но я не могу понять, возможно ли объединить это с функциями rworldmap... или если мне придется выяснить, как использовать пакет карт, который, кажется, работает по-другому.(Или, может быть, есть решение ggplot?)

Код rworldmap, который я сейчас использую (чтобы получить современную карту):

#make example data including Soviet Union
country <- as.vector(c("Afghanistan","Australia","Iceland","Soviet Union", 
"Zimbabwe"))
value <- as.vector(c(5,10,100,10,50))
df<-data.frame(country,value)

#make map
map1 <- joinCountryData2Map(df, joinCode = "NAME", nameJoinColumn = 
"country")
mapCountryData( map1, addLegend=F, catMethod="fixedWidth", 
nameColumnToPlot="value" )
#...Soviet Union is blank

1 Ответ

0 голосов
/ 27 ноября 2018

Ахах, есть решение ggplot, использующее старую карту из пакета mapdata:

library(ggplot2)
library(dplyr)
library(mapdata)

df<-data.frame(country=c("Afghanistan","Australia","Iceland","USSR","Zimbabwe"),
           value=c(5,10,100,10,50),stringsAsFactors=FALSE)

WorldData <- map_data('worldLores') #use the old map
WorldData <- fortify(WorldData)

mapped <- ggplot() +
  geom_map(data=WorldData, map=WorldData,
              aes(x=long, y=lat, group=group, map_id=region),
              fill="white", colour="#7f7f7f", size=0.5) +
  geom_map(data=df, map=WorldData,
              aes(fill=value, map_id=country),
              colour="#7f7f7f", size=0.5)
mapped

(код отображения заимствован из этой записи, cheers @hrbrmstr)

...