您是否正在寻找这样的东西:
labels <- data.frame(mpg = mtcars[which(mtcars$hp == max(mtcars$hp)), "mpg"]+7, hp = mtcars[which(mtcars$hp == max(mtcars$hp)), "hp"],text = paste0("Max value at mpg = ", mtcars[which(mtcars$hp == max(mtcars$hp)), "mpg"], " and hp = ", max(mtcars$hp)))
ggplot(mtcars, aes(mpg, hp))+
geom_line()+
geom_text(data = labels, aes(label = text))+
annotate("segment",
x=mtcars[which(mtcars$hp == max(mtcars$hp)), "mpg"]+2,
xend=mtcars[which(mtcars$hp == max(mtcars$hp)), "mpg"]+.2,
y= mtcars[which(mtcars$hp == max(mtcars$hp)), "hp"],
yend= mtcars[which(mtcars$hp == max(mtcars$hp)), "hp"],
arrow=arrow(), color = "blue")
解释:为了标注最大值,我们需要找到 mpg 的位置,即 hp 的最大值。为此,我们使用mtcars[which(mtcars$hp == max(mtcars$hp)), "mpg"]
. 该which()
语句为我们提供了该最大值的行位置,以便我们可以获得正确的 mpg 值。接下来我们用这个位置添加一点空间(即+2 和+.2)进行注释,使它看起来更好看。最后,我们可以构造一个位置相同(但偏移量不同)的数据框,并用于geom_text()
添加数据标签。