ggplot2/ggmap: 在绘图和图例中使用双色点标记
ggplot2/ggmap: Use two-color point markers in both plot and legend
我有一个数据框示例,其中包含用户 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))
但我得到了类似的东西,
形状甚至没有遍及整个地图。我希望形状均匀且与 mb.user 值成比例。但是这里的地图既不与 mb.user 成比例,也不与大小成比例。
此外图例也只显示一种颜色。它不会同时显示两种颜色。理想情况下,我想要一个甜甜圈形状的符号,其大小与 mb.user.
成正比
谁能帮我找出我在这里犯的错误?
谢谢
如果您使用带边框的点形状,您只需绘制一次点,它就会正确显示在图例中。如果您安装了 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
设置边框宽度。
关于您的原始代码,黑色圆圈的大小都相同,因为您通过在对 aes
的调用之外设置 size=4
覆盖了 size=mb.user
。在黑色点大于橙色点的情况下,您看不到某些橙色点。如果您删除 size=4
并在 aes
内执行 size=0.3*mb.user
,您将在缩放的橙色点内获得适当缩放的黑点。
但是,这仍然不能解决图例问题。我不认为有一种方法可以通过两次单独调用 geom_point
来获得带有黑色内部橙色点的图例,因为没有办法(至少我能想到的 none)创建一个结合 size/color 映射来做到这一点。使用带有填充标记的单个调用 geom_point
可以解决问题,但我想我会尽力解释为什么您的原始代码没有按预期工作。
我有一个数据框示例,其中包含用户 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))
但我得到了类似的东西,
形状甚至没有遍及整个地图。我希望形状均匀且与 mb.user 值成比例。但是这里的地图既不与 mb.user 成比例,也不与大小成比例。
此外图例也只显示一种颜色。它不会同时显示两种颜色。理想情况下,我想要一个甜甜圈形状的符号,其大小与 mb.user.
成正比谁能帮我找出我在这里犯的错误?
谢谢
如果您使用带边框的点形状,您只需绘制一次点,它就会正确显示在图例中。如果您安装了 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
设置边框宽度。
关于您的原始代码,黑色圆圈的大小都相同,因为您通过在对 aes
的调用之外设置 size=4
覆盖了 size=mb.user
。在黑色点大于橙色点的情况下,您看不到某些橙色点。如果您删除 size=4
并在 aes
内执行 size=0.3*mb.user
,您将在缩放的橙色点内获得适当缩放的黑点。
但是,这仍然不能解决图例问题。我不认为有一种方法可以通过两次单独调用 geom_point
来获得带有黑色内部橙色点的图例,因为没有办法(至少我能想到的 none)创建一个结合 size/color 映射来做到这一点。使用带有填充标记的单个调用 geom_point
可以解决问题,但我想我会尽力解释为什么您的原始代码没有按预期工作。