#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))