如何在R中使用geom_label_repel在ggmap上标记点?

时间:2018-03-24 00:05:24

标签: r ggplot2 ggmap

我有一个由5个酒店名称及其各自位置组成的数据框。我ggmap使用下面的代码在地图上绘制我的酒店。但是,当我试图将我的酒店名称显示在Plot上时,我遇到了问题。最初,我想,我应该将酒店名称放在传说中,“点/点”的颜色应该与酒店名称相对应。我的问题是我无法获得相同大小的'点/点'。经过研究,我发现更好的方式将酒店名称直接绘制到地图上。这是我遇到Plot created by Tung的地方。但是,每当我在代码下面运行时它会给我一个错误。

我的数据农场如下:

structure(list(hotel_name = structure(c(1L, 5L, 2L, 4L, 3L), .Names = c("h1_Loc", 
"h2_Loc", "h3_Loc", "h4_Loc", "h5_Loc"), .Label = c("Grand Hyatt San Diego", 
"Grand Hyatt San Francisco", "Hyatt Regency Orange County", "Hyatt Regency Sacramento", 
"Hyatt Regency San Francisco"), class = "factor"), longi = c(-117.168713, 
-122.395447, -122.407291, -121.490768, -117.916417), lati = c(32.709745, 
37.794589, 37.789216, 38.577627, 33.789322)), .Names = c("hotel_name", 
"longi", "lati"), row.names = c("h1_Loc", "h2_Loc", "h3_Loc", 
"h4_Loc", "h5_Loc"), class = "data.frame")
> ggmap(get_map(location = 'California', zoom = 6, maptype = "roadmap"))+ggplot(d1, aes(x= d1$longi, y = d1$lati)) +geom_point(color = "blue", size = 3)

代码我试图在地图而不是图例上获取我的酒店名称:

ggmap(get_map(location = 'California', zoom = 6, maptype = "roadmap"))+ggplot(d1, aes(x= d1$longi, y = d1$lati)) +geom_point(color = "blue", size = 3)
+ geom_label_repel(
  aes(d1$longi, d1$lati, label =d1$hotel_name),
  box.padding = 0.35, point.padding = 0.5,
  segment.color = 'grey50') +
  theme_classic(base_size = 12)

运行上述代码后出现错误:

Map from URL : http://maps.googleapis.com/maps/api/staticmap?center=California&zoom=6&size=640x640&scale=2&maptype=roadmap&language=en-EN&sensor=false
Information from URL : http://maps.googleapis.com/maps/api/geocode/json?address=California&sensor=false
Error: Don't know how to add o to a plot

提前感谢您的帮助和努力。如果你能提供和解释代码,作为R的新手,非常感谢。 提前谢谢,

1 个答案:

答案 0 :(得分:1)

非常简单的解决方案:ggmap会创建一个ggplot对象,因此您对ggmap(...) + ggplot(...)的所有内容实际上是将ggplot加在一起,但这不起作用。这就是错误的来源。

您的数据框中的数据将是您data电话的geom_point参数。

将其更改为

ggmap(get_map(location = 'California', zoom = 6, maptype = "roadmap")) +
    geom_point(aes(x = longi, y = lati), data = d1, color = "blue", size = 3)

这会将geom_point图层添加到ggplot创建的ggmap对象上。

此外,在ggplot中,您不希望在aes参数中命名数据框 - 因此我将x = d1$longi更改为x = longi的原因,以及y和任何其他你可能需要绘制的美学。