使用 ggmap 添加第二个图例
Adding a second legend with ggmap
我正在尝试构建一个包含不同颜色和大小的点的地图。我设法为颜色添加了一个图例,但我不明白为什么没有显示尺寸比例。我做了 3 次尝试,每次都没有达到我想要的结果。
这是我的代码的第一部分,其中包含简化的数据:
library(ggmap)
library(ggplot2)
###building data###
HK <- get_map(c(lon=114.1408686,lat=22.3593252), zoom=11)
map <- ggmap(HK, darken = c(0.5, "white"))
insignificantFrac <- 0.05
Records <- data.frame(lon=c(114.1288, 114.0235, 113.9876, 114.2219, 114.1809, 113.9933, 114.0798, 114.1812),
lat=c(22.23539, 22.29873, 22.20123, 22.24567, 22.30987, 22.37298, 22.34234, 22.26428),
pointColor=c('#AAFF00FF', '#F00000FF', '#FFE500FF', '#FFD100FF', '#00FF00FF', '#B3FF00FF', '#FFE200FF', '#FF2F00FF'),
pointSize=c(1,2,3,2,2,1,3,4))
legendPoints <- data.frame(labels=c('100+','10-99','1-9'), sizes=c(3,2,1), lon=c(0,0,0), lat=c(0,0,0))
###drawing the map###
x11()
transactionsMap <- map + geom_point(data=Records, aes(x=lon, y=lat), colour=Records$pointColor, size=Records$pointSize)
transactionsMap <- transactionsMap + ggtitle("HK Map") + xlab("") + ylab("")
transactionsMap <- transactionsMap + scale_colour_gradient2(breaks=c(5000, 11000, 20000), name='Value \n',
labels=c(paste(insignificantFrac/2*100,'% : ', round(5000)),paste('50% : ', round(11000)),paste((1-insignificantFrac/2)*100,'% : ', round(20000), '+')),
low='green', mid='yellow', high='red', limits=c(5000-1000, 20000+500), midpoint=11000)
#second legend line here
transactionsMap
在这一点上,我得到了这样的东西:
所以我尝试了以下三行。对于前 2 次尝试,情节不会改变。对于第三个,我无法控制图例的大小、数量、名称和标签:
transactionsMap <- transactionsMap + scale_size_manual(values=legendPoints$size, name="Volume")
transactionsMap <- transactionsMap + scale_size_area(name='Volume', breaks=c(3,2,1), labels=legendPoints$labels)
transactionsMap <- transactionsMap + geom_point(data=legendPoints, aes(x=lon, y=lat, size=sizes))
如果你把最后两个结合起来:
transactionsMap +
geom_point(data=legendPoints, aes(x=lon, y=lat, size=sizes)) +
scale_size_area(name='Volume', breaks=c(3,2,1), labels=legendPoints$labels)
这是你想要的吗?
编辑 - 要使图例上的尺寸与您地图上的尺寸相匹配,请在您的 scale_size_area
调用中添加:
scale_size_area(..., max_size=max(legendPoints$size))
我正在尝试构建一个包含不同颜色和大小的点的地图。我设法为颜色添加了一个图例,但我不明白为什么没有显示尺寸比例。我做了 3 次尝试,每次都没有达到我想要的结果。
这是我的代码的第一部分,其中包含简化的数据:
library(ggmap)
library(ggplot2)
###building data###
HK <- get_map(c(lon=114.1408686,lat=22.3593252), zoom=11)
map <- ggmap(HK, darken = c(0.5, "white"))
insignificantFrac <- 0.05
Records <- data.frame(lon=c(114.1288, 114.0235, 113.9876, 114.2219, 114.1809, 113.9933, 114.0798, 114.1812),
lat=c(22.23539, 22.29873, 22.20123, 22.24567, 22.30987, 22.37298, 22.34234, 22.26428),
pointColor=c('#AAFF00FF', '#F00000FF', '#FFE500FF', '#FFD100FF', '#00FF00FF', '#B3FF00FF', '#FFE200FF', '#FF2F00FF'),
pointSize=c(1,2,3,2,2,1,3,4))
legendPoints <- data.frame(labels=c('100+','10-99','1-9'), sizes=c(3,2,1), lon=c(0,0,0), lat=c(0,0,0))
###drawing the map###
x11()
transactionsMap <- map + geom_point(data=Records, aes(x=lon, y=lat), colour=Records$pointColor, size=Records$pointSize)
transactionsMap <- transactionsMap + ggtitle("HK Map") + xlab("") + ylab("")
transactionsMap <- transactionsMap + scale_colour_gradient2(breaks=c(5000, 11000, 20000), name='Value \n',
labels=c(paste(insignificantFrac/2*100,'% : ', round(5000)),paste('50% : ', round(11000)),paste((1-insignificantFrac/2)*100,'% : ', round(20000), '+')),
low='green', mid='yellow', high='red', limits=c(5000-1000, 20000+500), midpoint=11000)
#second legend line here
transactionsMap
在这一点上,我得到了这样的东西:
所以我尝试了以下三行。对于前 2 次尝试,情节不会改变。对于第三个,我无法控制图例的大小、数量、名称和标签:
transactionsMap <- transactionsMap + scale_size_manual(values=legendPoints$size, name="Volume")
transactionsMap <- transactionsMap + scale_size_area(name='Volume', breaks=c(3,2,1), labels=legendPoints$labels)
transactionsMap <- transactionsMap + geom_point(data=legendPoints, aes(x=lon, y=lat, size=sizes))
如果你把最后两个结合起来:
transactionsMap +
geom_point(data=legendPoints, aes(x=lon, y=lat, size=sizes)) +
scale_size_area(name='Volume', breaks=c(3,2,1), labels=legendPoints$labels)
这是你想要的吗?
编辑 - 要使图例上的尺寸与您地图上的尺寸相匹配,请在您的 scale_size_area
调用中添加:
scale_size_area(..., max_size=max(legendPoints$size))