ggplot2 / ggmap:在绘图和图例中使用双色点标记

时间:2016-03-31 19:12:46

标签: r colors ggplot2 ggmap

我有一个数据帧samp,用户ID,纬度,经度,mb。我想用一个与所用MB成比例的点绘制地图。我想在geom_point中使用甜甜圈形状,所以我想我可以使用两个不同大小的pch = 20来获得pch的甜甜圈形状。但我面临一些问题。

m <- get_map(location=c(lon=median(samp$longitude),lat=median(samp$latitude) ), zoom=10)
print(ggmap(m) + 
        geom_point(aes(x=longitude, y=latitude, size= mb.user), colour="orange", pch = 20, data=samp) + 
        geom_point(aes(x=longitude, y=latitude, size= mb.user), colour="black", pch = 20,  size = 4, data=samp))

但我得到了类似的东西,

enter image description here

整个地图的形状都不均匀。我希望形状是均匀的,并与mb.user值成比例。但这里的地图既不与mb.user或大小成比例。

此外,图例也只显示一种颜色。它没有一起显示两种颜色。理想情况下,我想要一个圆圈形符号,其大小与mb.user成正比。

有人能帮助我找到我在这里做的错误吗?

由于

1 个答案:

答案 0 :(得分:1)

如果使用具有边框的点形状,则只能绘制一次点,它将在图例中正确显示。如果您安装了ggplot2版本2(截至本文撰写时最新版本为2.1.0),您还可以使用stroke参数控制点边框的宽度。您还没有提供可重现的示例,因此以下是使用内置mtcars数据框的示例:

ggplot(mtcars, aes(wt, mpg)) +
  geom_point(aes(size=mpg), colour="red", fill="black", shape=21, stroke=1.5) +
  scale_size_area(max_size=4) 

shape=21是一个带边框的实心圆圈(有关可用形状,请参阅?pch)。 colour设置边框颜色,fill设置填充颜色,stroke设置边框宽度。

enter image description here

关于原始代码,黑圈的大小都相同,因为您在size=mb.user的调用之外设置了size=4来覆盖aes。在黑点大于橙色点的情况下,您无法看到一些橙色点。如果您移除size=4并在size=0.3*mb.user内执行aes,则会在缩放的橙色点内获得正确缩放的黑点。

然而,这仍然无法解决传奇问题。我不认为通过两次单独调用geom_point来获得带有黑色内橙色点的传奇,因为没有办法(至少没有我能想到的) of)创建一个组合的大小/颜色映射来做到这一点。使用带有填充标记的单个调用geom_point可以解决问题,但我想我会尽力解释为什么原始代码没有像您预期的那样工作。