当使用ggmap和geom_point时,geom_text无法工作

11

你好,我正在使用ggmap和gg_point函数显示在河口测量的数据。

我使用的代码如下:

    library(ggmap)
al1 <- get_map(location = c(lon = -87.525, lat = 30.35), zoom = 12, maptype = 'terrain')

lon<- c(-87.604474,-87.55)
lat<- c(30.362563,30.35)
label <- c("A","B")
df<-data.frame(lon,lat,label)

p <- ggmap(al1)+geom_point(data=df,aes(x=lon,y=lat,shape=label,label=label),size=3)
p <- p + xlab("Longitude")+ylab("Latitude")
p <- p +geom_text(aes(label=label, size=3,vjust=0))
p <- p + labs(title="Monitoring stations ")
p

ggsave("plot.pdf")
当我使用geom_text时,出现以下错误:“美学必须是长度为一或与数据问题:标签的长度相同”。
我想把标签放在图中的点旁边。我想要同时放置点和标签,并留有一些间距,以便更容易阅读。
我看了这篇文章“ggplot legend issue w/ geom_point and geom_text”,并尝试修复我的代码,如上所示,但我不知道为什么会出现这个问题。
还有另一篇文章How can I persuade ggplot2 geom_text to label a specified date in a time series plot?,讨论类似的问题。我是否因为使用了ggmap而得到不同的结果?
请帮助我解决这个问题。非常感谢。
Jdbaba
1个回答

12

你的问题在于你没有正确指定geom_text中的审美要求:

geom_text(data = df, aes(x = lon, y = lat, label = label), 
          size = 3, vjust = 0, hjust = -0.5)

您没有告诉 geom_text 使用数据框df中的变量。如果您不这样做,所有美学元素都将继承自主调用。最后,在将美学元素设置为单个值时,您不需要在aes()内部执行此操作,而是在外部执行。

我在调整hjust设置以使标签可见。


谢谢Joran,我刚刚弄清楚了这个问题,本来还想发布帖子呢。非常感谢你的时间。 - Jd Baba
@Jdbaba 没问题。(顺便说一下,我关于取消映射“shape”的想法是错误的。) - joran
我正在学习R和ggplot,非常兴奋你们提供的支持。感谢@Joran和@Josh O'Brien。 - Jd Baba

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接