Как объединить два графика, созданных autoplot?

#r #ggplot2 #quantmod

#r #ggplot2 #quantmod

Вопрос:

Давайте рассмотрим два финансовых актива (apple и gold) :

 start <- as.Date("2013-01-01")
end <- as.Date("2016-10-01")
library(quantmod)
library(ggplot2)
getSymbols("AAPL", src = "yahoo", from = start, to = end)
getSymbols("GOLD", src = "yahoo", from = start, to = end)
 

Давайте посмотрим, как выглядят сюжеты apple и gold :

 autoplot(Cl(AAPL))
 

введите описание изображения здесь

 autoplot(Cl(GOLD))
 

введите описание изображения здесь

Однако я не знаю, как я могу разместить их оба на одном графике. Я пытался найти решение, но ни один из них не использует autoplot() функцию. Возможно ли иметь два из приведенных выше графиков в одной системе координат?

Я ищу что-то подобное, но созданное с autoplot()

 ggplot() geom_line(aes(x = 1:945, y = Cl(AAPL))) geom_line(aes(x = 1:945, y = Cl(GOLD)))
 

введите описание изображения здесь

Ответ №1:

Используя, например patchwork , это может быть достигнуто следующим образом:

 start <- as.Date("2013-01-01")
end <- as.Date("2016-10-01")
library(quantmod)

library(ggplot2)
getSymbols("AAPL", src = "yahoo", from = start, to = end)

#> [1] "AAPL"
getSymbols("GOLD", src = "yahoo", from = start, to = end)
#> [1] "GOLD"

library(patchwork)

p1 <- autoplot(Cl(AAPL))
p2 <- autoplot(Cl(GOLD))
p1   p2
 

РЕДАКТИРОВАТЬ Следуя примеру в документах zoo::autopilot.zoo , вы могли бы создать свой график вручную, используя ggplot2 примерно так:

 ggplot(mapping = aes(x = Index, y = Value))  
  geom_line(data = fortify(Cl(AAPL), melt = TRUE), aes(color = "AAPL"))   
  geom_line(data = fortify(Cl(GOLD), melt = TRUE), aes(color = "GOLD"))   
  xlab("Index")   ylab("x")
 

Комментарии:

1. Это очень хорошее решение, но я бы предпочел иметь эти графики на одном графике, а не на параллельных графиках. Как вы думаете, это возможно ? ;))

2. Я отредактировал свой вопрос, что именно я ищу

3. Привет, Джон. Смотрите мою правку о том, как этого добиться. Лучший S

4. Идеально! Просто, может быть, одна незначительная вещь. Как вы можете видеть в легенде, у нас есть переменные, упомянутые под словом «цвет». Есть ли какая-либо возможность, как мы можем опустить это написание? т.е. Как удалить «цвет», размещенный в правой части графика.

5. (: labs(color = NULL) удалит заголовок для обозначения цвета. Кстати: через labs вы также можете добавить заголовок или изменить метки осей.

Ответ №2:

Создайте комбинированный объект xts / zoo, используя cbind , а затем autoplot его. Опустите facet=NULL этот параметр, если вы предпочитаете, чтобы каждый из них находился на отдельной панели. Используйте scale(closes) вместо closes , если вы хотите сначала нормализовать цены. Выходные данные из autoplot строки отображаются в конце строки.

 closes <- cbind(Cl(AAPL), Cl(GOLD)) 
autoplot(closes, facet = NULL)
 

Много акций

Если запасов много, и мы не хотим cbind использовать их по отдельности, то вместо этого мы могли бы использовать этот код для создания closes .

 tickers <- c("AAPL", "GOLD")
getSymbols(tickers, from = start, to = end, env = stocks <- new.env())
closes <- do.call("cbind", eapply(stocks, Cl))  
 

или мы могли бы использовать этот код, предполагая tickers , что выше:

 getSymbols(tickers, from = start, to = end)
closes <- do.call("cbind", lapply(mget(tickers), Cl))
 

Вывод

скриншот