Нанесение контуров на глобальную карту с использованием ggplot и ортогональной проекции

Я пытаюсь построить карту, подобную этой, используя ggplot и этот набор данных < /а>:

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

Используя этот код:

dev.off()
map.world <- map_data("world")
plot <- ggplot()
plot <- ggplot(data=DATASET, aes(V2,V1,fill=V3)) + 
stat_density2d(aes(fill=..level..,alpha=..level..),
geom='polygon',colour='black') + 
scale_fill_continuous(low="green",high="red") +guides(alpha="none") 
plot <- plot + expand_limits(x = map.world$long, y = map.world$lat)
plot <- plot + theme(panel.grid=element_blank(), 
panel.border=element_blank())
plot <- plot + theme(axis.ticks=element_blank(), axis.text=element_blank())
plot <- plot + theme(legend.position="right",plot.title = element_text(size = 
10, face = "bold"))
plot <- plot + coord_map("ortho", orientation=c(90, -90, 0)) 
plot

Я получаю эту карту:

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

Как видите, в некоторых местах контуры искажены. Однако, когда я добавляю карты стран:

dev.off()
map.world <- map_data("world")
plot <- ggplot()
plot <- ggplot(data=DATASET, aes(V2,V1,fill=V3)) + 
stat_density2d(aes(fill=..level..,alpha=..level..),geom='polygon',
colour='black') + 
scale_fill_continuous(low="green",high="red") +guides(alpha="none")    
plot <- plot + geom_map(dat=map.world, map = map.world, aes(map_id=region), 
fill="NA", color="black")
plot <- plot + expand_limits(x = map.world$long, y = map.world$lat)
plot <- plot + theme(panel.grid=element_blank(), 
panel.border=element_blank())
plot <- plot + theme(axis.ticks=element_blank(), axis.text=element_blank())
plot <- plot + theme(legend.position="right",plot.title = element_text(size = 
10, face = "bold"))
plot <- plot + coord_map("ortho", orientation=c(90, -90, 0)) 
plot

Я получаю это сообщение:

"Error in FUN(X[[i]], ...) : object 'V2' not found".

Я был бы признателен за вашу помощь.

Вы можете загрузить набор данных здесь


person Sam    schedule 12.04.2018    source источник


Ответы (1)


Это только частичный ответ, но проблема с object 'V2' not found заключается в том, что когда вы впервые создаете объект ggplot, вы отображаете V2, V1 и V3 как эстетику. Они будут распространяться на все слои, если вы не переопределите их или не укажете, что слой не должен их наследовать. Добавление inherit.aes = F к вашему geom_map исправляет это.

library(tidyverse)

DATASET <- read.delim("https://www.dropbox.com/s/57qeekwm920lxbu/dataset.txt?dl=1", header = F)

map.world <- map_data("world")
plot <- ggplot()
plot <- ggplot(data=DATASET, aes(V2,V1,fill=V3)) + 
    stat_density2d(aes(fill=..level..,alpha=..level..),geom='polygon',
                                 colour='black') + 
    scale_fill_continuous(low="green",high="red") +guides(alpha="none")    
plot <- plot + geom_map(dat=map.world, map = map.world, aes(map_id=region), 
                                                fill="NA", color="black", inherit.aes = F)
# plot <- plot + expand_limits(x = map.world$long, y = map.world$lat)
plot <- plot + theme(panel.grid=element_blank(), 
                                         panel.border=element_blank())
# plot <- plot + theme(axis.ticks=element_blank(), axis.text=element_blank())
plot <- plot + theme(legend.position="right",plot.title = element_text(size = 
                                                                                                                                                10, face = "bold"))
plot <- plot + coord_map("ortho", orientation=c(90, -90, 0)) 
print(plot)

Создано 13 апреля 2018 г. с помощью пакета reprex (v0.2.0).

Я снова включил галочки, просто чтобы попытаться выяснить проблему с ограничениями, которая, как я полагаю, является причиной появления случайных линий. Некоторые точки выходят за пределы координат, но я не знаю, как это исправить. Может быть, у кого-то еще есть предложения по настройке expand_limits или lims --- пока что я не совсем понял.

Я нашел это на странице руководства для coord_map:

# Centered on New York (currently has issues with closing polygons)
worldmap + coord_map("ortho", orientation = c(41, -74, 0))

Так что это может быть известная проблема.

person camille    schedule 13.04.2018