尽管输入了数据集,有没有办法在图的同一点上绘制一个注解(custom)()?

时间:2019-04-12 11:40:17

标签: r ggplot2 annotations

我有一个数据框列表。数据帧具有以下列:DistGPSSpeed_kmh。我想在绘图的特定点上绘制左弯符号的png。我将以下代码用于数据帧df,结果显示如下:

  ggplot(df, aes(Dist, GPSSpeed_kmh)) +
    geom_point(size = 1) + 
    geom_smooth(se = TRUE, span = 0.7) +
    scale_x_continuous(limits = c(-20,11),breaks = seq(-30, 10, by = 10), labels = abs(breaks)) +
    geom_vline(xintercept = -16) +
    annotation_custom(leftbend, xmin = -18, xmax = -14, ymin = 30, ymax = 40)

enter image description here

但是当我使用另一个数据框时,因为参数yminymax依赖于输入数据框,所以要在geom_vline()上方绘制左弯图标,所以在另一点绘制了左弯图标。 ({xminxmax是固定的)。 有没有办法在输入数据框中调整参数yminymax?我希望所有数据框都具有通用的输出结果。

提前谢谢!

*如果我使用另一个数据框,则结果如下: enter image description here

该图标甚至没有绘制,因为该数据框没有其他GPSSpeed_kmh从30(ymin)到40(ymax)的值!

1 个答案:

答案 0 :(得分:1)

我的评论是这样的:

library(ggplot2)
library(png)             ## for loading the png
library(grid)            ## to render the image
y=c(1,2,3)
x=c(0,0,0)
d=data.frame(x=x, y=y)   ## make sample dataframe

img <- readPNG(system.file("img", "Rlogo.png", package="png"))
g <- rasterGrob(img, interpolate=TRUE)

mi <- 1; ma <- 2.2       ## defining limits for y-axis
ggplot(d, aes(x, y)) + geom_point() + 
       ylim(mi, ma)+     ## set limits for y-axis
       annotation_custom(g, xmin=.020, xmax=.030, ymin=.5*ma) 

通过将notation_custom的ymin与y轴最大值的一半(或任意分数)相关联,可以确保图像始终位于同一位置。

可以在herehere中找到更多帮助。

我希望这会有所帮助。