annotation_custom
кажется привязанным к минимальным и максимальным координатам, как если бы вы получали прямоугольники или изображения. Чтобы стрелка имела смысл, ей нужно что-то интерпретировать как направление. Я переключаюсь на annotate
с сегментом geom и сохраняю стрелку для повторного использования.
my_arrow <- arrow(type = "open", ends = "first", length = unit(4, "mm"))
x +
annotate("segment", x = 1.5, xend = 2.2, y = 1.5, yend = 1.25, arrow = my_arrow) +
annotate("segment", x = 1.5, xend = 2.2, y = 1.25, yend = 1.5, arrow = my_arrow)
Поскольку annotate
не имеет data
аргумент, вы не можете (AFAIK) отображать переменные фрейма данных с помощью aes
, но вы можете дать ему векторы, чтобы сжать их в один вызов.
x +
annotate("segment", x = 1.5, xend = 2.2, y = c(1.5, 1.25), yend = c(1.25, 1.5), arrow = my_arrow)
# same output
Изменить, чтобы добавить: на основе комментария, возможно, имеет смысл поместить координаты сегмента во фрейм данных, чтобы вы также могли обращаться к ним для размещения меток.
coords <- tibble::tribble(
~x, ~xend, ~y, ~yend, ~lbl,
1.5, 2.2, 1.5, 1.25, "Still a square",
1.5, 2.2, 1.25, 1.5, "This is a square"
)
x +
annotate("segment", x = coords$x, xend = coords$xend, y = coords$y, yend = coords$yend, arrow = my_arrow) +
geom_text(aes(label = lbl, x = xend, y = yend), data = coords, hjust = 0)