Страны с цветовым кодом, использующие данные в R и ggplot

#r #ggplot2

#r #ggplot2

Вопрос:

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

Что я упускаю из виду?

КОД И ДАННЫЕ

 url='https://raw.githubusercontent.com/fivethirtyeight/data/master/alcohol-consumption/drinks.csv'
df = read.csv(url)

library(ggmap)
library(parallel)
# Get Lon and Lat for each country

countries = as.character(df$country)
df$region = df$country
coords = mclapply(X = countries,FUN= function(x) geocode(x))
coords=do.call(rbind.data.frame,coords)


library(RColorBrewer)
library(maptools)
library(ggplot2)
library(rworldmap)

map.world = map_data(map='world')
map.world = merge(df,map.world, by='region',all.y=TRUE )

gg = ggplot()
gg = gg   geom_map(data = map.world,map = map.world,
                   aes(map_id = region,x=long,y=lat,fill=map.world$beer_servings))
gg= gg  scale_fill_gradient(breaks=c(500000,1000000,1500000),
                            labels=c("Low","Medium","High"))
gg = gg   coord_equal()
ggsave(filename = 'myplot.png',plot = gg)
  

Ответ №1:

Я думаю, вам нужно сбросить порядок после объединения ваших данных:

 url='https://raw.githubusercontent.com/fivethirtyeight/data/master/alcohol-consumption/drinks.csv'
df = read.csv(url)
df$region = as.character(df$country)

library(RColorBrewer)
library(maptools)
library(ggplot2)
library(rworldmap)

map.world = map_data(map='world')
map.world = merge(df,map.world, by='region',all.y=TRUE)
map.world = map.world[order(map.world$order), ] # <---

ggplot()   
  geom_map(data = map.world,map = map.world, aes(
    map_id = region,
    x=long,
    y=lat,
    fill=beer_servings
  ))   
  coord_quickmap()
  

введите описание изображения здесь

Комментарии:

1. хм, похоже, это действительно работает! Почему сброс заказа должен иметь значение?

2. Я думаю, потому, что в противном случае точки полигона рисуются в неправильном порядке, и карта выглядит испорченной, как в вашем примере.