R语言 向ggplot2中的geom_point()添加连续箭头

l2osamch  于 2022-12-20  发布在  其他
关注(0)|答案(1)|浏览(214)

我想添加一系列箭头,连接geom_point中的每个观测,如图所示:

我知道geom_segment是要使用的,但我遇到了问题,经过相当多的搜索后,还没有找到类似的东西。
这是应该满足以下模式的示例代码:
注:标签不重要;只有箭

df <- data.frame(year = c(1935:1968),

                 y_axis_values = c( 2755,2696, 2646, 2701, 2654, 2766, 2832, 2964, 3041, 3010, 3018, 3374, 3545, 3441, 3456, 3455, 3503, 3641, 3721, 3828, 3831, 3858, 3925, 3880, 3935, 3895, 3840, 3756, 3669, 3502, 3145, 2812, 2586,2441),

                 x_axis_values = c(238, 240, 241, 242, 244, 245, 246, 268, 333, 335, 331, 253, 243, 241, 242, 237, 242, 240, 233, 232, 236, 245, 256, 261, 265, 278, 291, 290, 290, 307, 313, 325, 339, 338)

我试过这个通式的许多不同的论证变体,但似乎找不到它。

ggplot(df, aes(x = x_axis_values, y = y_axis_values) +
  geom_point() +
  geom_segment()
k4emjkb1

k4emjkb11#

您需要每个段的xend和yend值。由于数据框是按顺序排列的,因此每个段的xend和yend值就是下一行的x和y值。您可以通过对x和y美学使用dplyr::lead来获得这些值。

library(ggplot2)
library(dplyr)

ggplot(df, aes(x = x_axis_values, y = y_axis_values)) +
  geom_point(color = "#69b3a2") +
  geom_segment(aes(xend = after_stat(lead(x)), yend = after_stat(lead(y))),
               arrow = arrow(length = unit(3, "mm")), color = "#69b3a2") +
  geom_text(aes(label = year), size = 5, fontface = 2,
            data = . %>% filter(year %in% c(1935, 1937, 1939, 1942, 1945, 1946,
                                            1953, 1957, 1960, 1961)),
            nudge_x = c(-3, -2, 4, 0, 0, -2, -5, 0, 3, 5),
            nudge_y = c(30, -30, 10, -30, -40, -40, 0, -50, 30, 0)) +
  labs(x = "partic", y = "tfr") +
  theme_bw(base_size = 16)

相关问题