Карта мира без широты и долготы - PullRequest
0 голосов
/ 28 апреля 2020

У меня есть фрейм данных:

| Country       | Country_code | Id   | Unique_person |
|---------------|--------------|------|---------------|
| India         | IN           | 40   | 2             |
| China         | CN           | 3781 | 1             |
| Mexico        | MX           | 40   | 1             |
| United States | US           | 1000 | 14            |
| United States | US           | 3781 | 566           |
| United States | US           | 40   | 43            |
| United States | US           | 65   | 908           |
| United States | US           | 815  | 78            |

Мне нужно построить карту мира, используя ggplot2, чтобы размер «unique_person» варьировался в зависимости от разного цвета Id в каждой стране. Поскольку у меня нет широты и долготы, я не могу построить карту мира. Может кто-нибудь помочь мне с этой проблемой?

Ответы [ 2 ]

0 голосов
/ 28 апреля 2020

Существует несколько способов построения географических данных, один хороший и простой способ - использовать ggplot2 в сочетании с пакетом maps, который предоставляет географические полигоны, отображающие страны мира.

Вы можете использовать world сопоставьте набор данных и объедините его с вашими данными, например, на основе названий стран, чтобы получить географические координаты. Я не совсем понял, что вы хотите построить, но базовый вариант для вас может быть:

Данные

structure(list(Country = c("India", "China", "Mexico", "United States", 
"United States", "United States", "United States", "United States"
), Country_code = c("IN", "CN", "MX", "US", "US", "US", "US", 
"US"), Id = c(40, 3781, 40, 1000, 3781, 40, 65, 815), Unique_person = c(2, 
1, 1, 14, 566, 43, 908, 78)), class = c("spec_tbl_df", "tbl_df", 
"tbl", "data.frame"), row.names = c(NA, -8L), spec = structure(list(
    cols = list(Country = structure(list(), class = c("collector_character", 
    "collector")), Country_code = structure(list(), class = c("collector_character", 
    "collector")), Id = structure(list(), class = c("collector_double", 
    "collector")), Unique_person = structure(list(), class = c("collector_double", 
    "collector"))), default = structure(list(), class = c("collector_guess", 
    "collector")), skip = 1), class = "col_spec"))

Код

library(ggplot2)
library(maps)

data$Country[data$Country == 'United States'] <- "USA" # names are different for USA in datasets

data <- merge(data, 
              map_data("world"), by.x = "Country", by.y = "region") %>%
  arrange(Country, order)

ggplot() + 
  # world map
  geom_polygon(data = map_data("world"), 
               aes(x=long, y = lat, group = group),
               fill = "grey50") +
  # custom map
  geom_polygon(data = data,
               aes(x=long, y = lat, group = group, fill = Id))

0 голосов
/ 28 апреля 2020

Хотя, возможно, я не правильно понимаю проблему Id, вы можете построить карту, не используя широту и долготу, как показано ниже. Я надеюсь, что это поможет вам.

library(rworldmap)
dat<-data.frame("country"=c("India", "China", "Mexico", "United States"), "Unique_person"=c(2, 1, 1, 14))
sdat <- joinCountryData2Map(dat, joinCode="NAME", nameJoinColumn="country")
mapCountryData(sdat, nameColumnToPlot="Unique_person", catMethod="fixedWidth", addLegend = TRUE)

image

...