Измените цвет указанных c наблюдений на боксплоте с помощью ggplot - PullRequest
0 голосов
/ 25 марта 2020

Я нарисовал коробочную диаграмму, используя ggplot, дискретных дневных ценовых индексов промышленного индекса Доу-Джонса за период с 1 января 2000 года по 24 марта 2020 года.

На этой диаграмме я хотел бы выделить конкретные c наблюдений на графике следующим образом:

  1. Самое последнее наблюдение в наборе данных. Последнее наблюдение во временном ряду - это возврат цен 24 марта 2020 года, который составляет 11,4%. Я хотел бы выделить это наблюдение на диаграмме другим цветом
  2. Во-вторых, я хотел бы указать дату и закрасить конкретное наблюдение в эту дату другим цветом. Например, я хотел бы выбрать 16 марта 2020 года и выделить наблюдение с возвращением -12,9%.

Наконец, я хотел бы добавить легенду к диаграмме, которая показывает эти два наблюдения с метками « Current »и« 16-Mar-20 »

Любой совет о том, как получить этот вывод, был бы очень признателен, спасибо!

library(rtsdata)
library(dplyr)
library(ggplot2)
library(xts)
library(PerformanceAnalytics)
library(tbl2xts)

price_data = ds.getSymbol.yahoo("^DJI", from = "2000-01-01", to = Sys.Date())
price_data = data.frame(date=index(price_data), coredata(price_data))
price_data = as_tibble(price_data)

closing_price = price_data %>%
  select(date, DJI.Close) %>%
  rename(close = DJI.Close)

return_data = Return.calculate(tbl_xts(closing_price), method = c("discrete"))
return_data = data.frame(date=index(return_data), coredata(return_data))
return_data = as_tibble(return_data)

return_data = return_data %>%
  rename(return_obs = close)

ggplot(data = return_data, aes(x = "", y = return_obs)) + 
  geom_boxplot() + 
  scale_y_continuous(labels = scales::percent_format(accuracy = 1)) + 
  ylab("Daily price return") + 
  xlab("Index") + 
  ggtitle("Boxplot of the Dow Jones Index \n (01 Jan 2000 to 24 March 2020)")

enter image description here

1 Ответ

2 голосов
/ 26 марта 2020

Добавьте несколько слоев geom_point, например, так:

library(rtsdata)
library(dplyr)
library(ggplot2)
library(xts)
library(PerformanceAnalytics)
library(tbl2xts)

price_data = ds.getSymbol.yahoo("^DJI", from = "2000-01-01", to = Sys.Date())
price_data = data.frame(date=index(price_data), coredata(price_data))
price_data = as_tibble(price_data)

closing_price = price_data %>%
  select(date, DJI.Close) %>%
  rename(close = DJI.Close)

return_data = Return.calculate(tbl_xts(closing_price), method = c("discrete"))
return_data = data.frame(date=index(return_data), coredata(return_data))
return_data = as_tibble(return_data)

return_data = return_data %>%
  rename(return_obs = close)

data1 <- filter(return_data, date == as.Date("2020-03-24"))
data2 <- filter(return_data, date == as.Date("2020-03-16"))

ggplot(data = return_data, aes(x = "", y = return_obs)) + 
  geom_boxplot() + 
  geom_point(data = data1, color = "red") +
  geom_point(data = data2, color = "green") +
  geom_text(aes(label = date), data = data1, color = "red", hjust = -.1) +
  geom_text(aes(label = date), data = data2, color = "green", hjust = -.1) +
  scale_y_continuous(labels = scales::percent_format(accuracy = 1)) + 
  ylab("Daily price return") + 
  xlab("Index") + 
  ggtitle("Boxplot of the Dow Jones Index \n (01 Jan 2000 to 24 March 2020)")
#> Warning: Removed 1 rows containing non-finite values (stat_boxplot).

Создано в 2020-03-25 пакетом prex (v0 .3.0)

...