5

我正在尝试用指向线图中最高点的箭头注释线图,并在图上显示箭头和最大值。我使用mtcars数据集作为参考。下面是我的代码。

e <- df$mpg
ggplot(df, aes(x=e, y=df$hp)) + 
  geom_line() + 
  annotate("segment", color="blue", x=max(e), xend = max(e), y=max(df$hp), 
            yend=max(df$hp), arrow=arrow())

提前致谢,

4

2 回答 2

8

您是否正在寻找这样的东西:

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()添加数据标签。

于 2018-08-05T20:23:50.453 回答
5

使用包“ggpmisc”和“ggrepel”的替代解决方案。(通过调整 span 的值,可以轻松修改此代码以标记多个峰值。)

library(ggplot2)
library(ggpmisc)
library(ggrepel)

ggplot(mtcars, aes(mpg, hp))+
  geom_line()+
  stat_peaks(span = NULL,
             geom = "text_repel",
             mapping = aes(label = paste(..y.label.., ..x.label..)),
             x.label.fmt = "at %.0f mpg",
             y.label.fmt = "Max hp = %.0f",
             segment.colour = "blue",
             arrow = grid::arrow(length = unit(0.1, "inches")),
             nudge_x = 5)

在此处输入图像描述

于 2018-08-05T22:25:58.130 回答