R - 当没有可用数据时,将图例添加到ggmap

时间:2015-12-07 16:46:15

标签: r ggplot2 ggmap

我正在试图弄清楚如何使用ggmap / ggplot显示包含图例的地图。

我到目前为止:

library(ggmap)
library(RColorBrewer)
bbox <- c(8.437526,47.328268,8.605915,47.462160)
map.base <- get_map(maptype='toner',source = 'stamen',location = bbox)
ggmap(map.base) +
geom_blank() +
ggtitle("2015-09-21 06:00:00 CEST") +
scale_colour_manual(values = rev(brewer.pal(7,"Spectral")), drop = FALSE)+
scale_size_manual(values=c(1:7), drop = FALSE) +
guides(color=guide_legend(title='Mean Delay [s]'), size = guide_legend(title='Mean Delay [s]'))+
ggsave(file=paste("map_","2015-09-21 060000",".png",sep=""),dpi = 100)
dev.off()

这会在正确的边界框中生成正确的地图。但即使我已经指定:“scale_colour_manual”和“scale_size_manual”,“drop = FALSE”,也没有出现传奇。如何在没有数据显示的情况下显示图例?

总体意图是在时间序列中创建给定间隔的单个地图。现在问题是某些间隔没有数据,因此显示的地图没有比例。如果地图没有比例,则地图的尺寸​​不同,从而无法从不同的地图创建电影。这就是为什么我需要能够创建一个没有数据的地图但显示传奇的原因。

谢谢。

1 个答案:

答案 0 :(得分:3)

考虑到Jaap的评论,我必须在aes中调用一个传说,我已经能够通过以下代码实现我想要的目标:

library(ggmap)
library(RColorBrewer)
bbox <- c(8.437526,47.328268,8.605915,47.462160)
map.base <- get_map(maptype='toner',source = 'stamen',location = bbox)
ggmap(map.base) +
geom_point(aes(x=0,y=0, color=cut(0,breaks = c(-Inf,0,60,120,240,300,360,Inf),right = FALSE), size=cut(0,breaks = c(-Inf,0,60,120,240,300,360,Inf),right = FALSE))) +
ggtitle("2015-09-21 06:00:00 CEST") +
scale_colour_manual(values = rev(brewer.pal(7,"Spectral")), drop = FALSE)+
scale_size_manual(values=c(1:7), drop = FALSE) +
guides(color=guide_legend(title='Mean Delay [s]'), size = guide_legend(title='Mean Delay [s]')) +
ggsave(file=paste("map_","2015-09-21 060000",".png",sep=""),dpi = 100)
dev.off()

我知道这不是最优雅的方式,但它现在有效。

我基本上在边界框之外创建一个虚拟点来显示。然后我给点一个值,根据我想要的断点切割,然后相应地着色和调整大小。只记得将x和y的值放在边界框之外的aes中。 欢迎提供更好的解决方案。