如何在ggplot线图中注释累积矢量的最终值?

时间:2019-04-04 14:18:14

标签: r ggplot2

我有一个ggplot折线图,它显示了游戏中两个累积得分的向量(每个团队一个)。现在,我对当前的状态感到满意,但我想在行尾注释团队的当前得分(即累积价值)。

各队的得分过程如下:

> testVectorJG
 [1]  17 138  45   0 182 117  49   0  94   0  57   0
> testVectorJW
 [1] 145  64 157 182   0  65 133 182 136 202 105 202

我的数据框如下:

test_df <- tribble(~puntenvector, ~Team, ~Rondenummer, ~cumPunten,
                   145, 'Jaap, &, Wil', 1, 145,
                   64, 'Jaap, &, Wil', 2, 209,
                   157, 'Jaap, &, Wil', 3, 366,
                   182, 'Jaap, &, Wil', 4, 548,
                   0, 'Jaap, &, Wil', 5, 548,
                   65, 'Jaap, &, Wil', 6, 613,
                   133, 'Jaap, &, Wil', 7, 746,
                   182, 'Jaap, &, Wil', 8, 928,
                   136, 'Jaap, &, Wil', 9, 1064,
                   202, 'Jaap, &, Wil', 10, 1266,
                   105, 'Jaap, &, Wil', 11, 1371,
                   202, 'Jaap, &, Wil', 12, 1573,
                   17, 'Jasper, &, Gijs', 1, 17,
                   138, 'Jasper, &, Gijs', 2, 155,
                   45, 'Jasper, &, Gijs', 3, 200,
                   0, 'Jasper, &, Gijs', 4, 200,
                   182, 'Jasper, &, Gijs', 5, 382,
                   117, 'Jasper, &, Gijs', 6, 499,
                   49, 'Jasper, &, Gijs', 7, 548,
                   0, 'Jasper, &, Gijs', 8, 548,
                   94, 'Jasper, &, Gijs', 9, 642,
                   0, 'Jasper, &, Gijs', 10, 642,
                   57, 'Jasper, &, Gijs', 11, 699,
                   0, 'Jasper, &, Gijs', 12, 699)

我正在如下创建当前的ggplot:

ggplot(test_df, aes(x = Rondenummer, y = cumPunten, colour = Team, group = Team)) +
    geom_line() +
    labs(y = "Punten",
         title = "Cumulatief aantal punten (inclusief roem) per ronde") +
    theme_grey()

那么如何在行尾为两个团队以一种很好的,不重叠的方式显示每个团队的当前得分?

谢谢!

1 个答案:

答案 0 :(得分:1)

您可以包括geom_text图层,该图层仅绘制数据的子集(与到目前为止进行的最大回合相对应)。您可以通过将子集函数传递给该层的data参数来实现这一点。

此外,对于不重叠的内容,您可以与nudge_xnudge_y一起玩。在此示例中,我仅添加了一个nudge_y。 另一种选择是使用geom_text_repel包中的ggrepel,它为您处理不重叠的东西。

max_round <- max(test_df$Rondenummer)
ggplot(test_df, aes(x = Rondenummer, y = cumPunten, colour = Team, group = Team)) +
  geom_line() +
  geom_text(data = function(x) subset(x, Rondenummer == max_round),
            aes(label = cumPunten),
            nudge_x = 0.75) +
  labs(y = "Punten",
       title = "Cumulatief aantal punten (inclusief roem) per ronde") +
  theme_grey()

Resulting plot

ggrepel解决方案:

max_round <- max(test_df$Rondenummer)
ggplot(test_df, aes(x = Rondenummer, y = cumPunten, colour = Team, group = Team)) +
  geom_line() +
  ggrepel::geom_text_repel(data = function(x) subset(x, Rondenummer == max_round),
            aes(label = cumPunten)) +
  labs(y = "Punten",
       title = "Cumulatief aantal punten (inclusief roem) per ronde") +
  theme_grey()

ggrepel