2015-07-22 69 views
2

我正在尝试构建包含不同颜色和大小的点的地图。我设法为该颜色添加了一个图例,但我无法确定尺寸缩放显示的原因。我做了三次尝试,每次都没有达到我想要的。使用ggmap添加第二个图例

这是我与简化的数据编码的第一部分:

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 

在这一点上,我得到了这样的事情:

enter image description here

所以,我想这三个以下行。对于前两次尝试,情节不会改变。对于第三个,我无法控制的大小,数量,名称也不是传说中的标签:

enter image description here

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)) 

回答

1

如果你把你的最后两个:

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) 

enter image description here

是你以前的样子吗?


编辑 - 使对传说中的大小匹配那些在你的地图,在你scale_size_area添加调用:

scale_size_area(..., max_size=max(legendPoints$size)) 
+0

嗨, 这是很接近我想要做的,但你的情节,尺度点的大小(似乎是3,4,5)比地图上的(1,2,3)更大。这是一种控制这种方式吗? – OIE66

+0

是的 - 在'scale_size_area'调用中使用'max_size = max(legendPoints $ size)' - 更新的答案 –