如何在折线图上添加端点数据值和图表旁边的百分比变化header?

How to add data values of end points on line chart and the percentage change next to the chart header?

我有以下数据框 (df1) 及其对应的 ggplot2 折线图。我的 R 代码如下:

codes_list <- read.csv("codes_list.csv", stringsAsFactors=FALSE)

inner_join(df1, codes_list, by = c('ticker' = 'code')) %>% 
  ggplot(aes(x = ref.date, y = price.close)) + 
  geom_line() +
  facet_wrap(~desc, scales = 'free_y') 

"codes_list.csv" 是在 df1 中找到的代码缩写的查找文件。

df1 的摘录如下:

price.close      ticker    ref.date
  18.01           AAN      2020-12-21
  17.13           AAN      2020-12-22
  16.75           AAN      2020-12-23
  16.78           AAN      2020-12-24
  65.62           CROX     2020-12-21
  64.76           CROX     2020-12-21
  64.59           CROX     2020-12-21
  62.59           CROX     2020-12-21

gplot2 图表的摘录如下所示。

我想在折线图上添加以下内容:

  1. 起始值及其对应的结束值
  2. 折线图旁边的百分比变化 header

预期输出如下所示:

请问我怎样才能做到这一点?

您可以通过 tickerref.date arrange 数据,在代码值中添加百分比变化,创建一个新的 label 列,仅保留第一个和最后一个值并绘制数据。

library(dplyr)
library(ggplot2)

df %>%
  mutate(ref.date = as.Date(ref.date)) %>%
  arrange(ticker, ref.date) %>%
  group_by(ticker) %>%
  mutate(ticker = paste(ticker, round((last(price.close) - 
                  first(price.close))/last(price.close) * 100, 2), '%'), 
         label = replace(round(price.close,2), -c(1, n()), '')) %>%
  ggplot(aes(x = ref.date, y = price.close, label = label)) + 
  geom_line() + geom_text() + 
  facet_wrap(~ticker, scales = 'free_y') 

根据您的实际数据,您可能需要使用 hjustvjustnudge_x 和 [=19= 等参数调整标签在 geom_text 中的位置].