使用ggplot和正交投影在全球地图上绘制轮廓

时间:2018-04-12 15:55:25

标签: r ggplot2 contour orthographic sf

我正在尝试使用ggplot和这个dataset 绘制这样的地图:

enter image description here

使用此代码:

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

我得到这张地图:

enter image description here

如您所见,在某些位置,轮廓会扭曲。但是,当我添加国家地图时:

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"

感谢您的帮助。

您可以下载数据集here

1 个答案:

答案 0 :(得分: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)

reprex package(v0.2.0)创建于2018-04-13。

我重新打开了刻度线,试图找出极限问题,我相信它正在制造流线。有些点超出了坐标限制,但我不确定如何确切地解决这个问题。也许其他人有关于如何调整expand_limitslims的建议 - 到目前为止,我还没有完全实现。

我在coord_map的手册页中找到了这个:

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

所以这可能是一个已知的问题。