#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. Я думаю, потому, что в противном случае точки полигона рисуются в неправильном порядке, и карта выглядит испорченной, как в вашем примере.