问题描述
让我们考虑两种金融资产(苹果和黄金):
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",to = end)
让我们看看苹果和黄金的图是怎样的:
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)))
解决方法
使用例如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",to = end)
#> [1] "GOLD"
library(patchwork)
p1 <- autoplot(Cl(AAPL))
p2 <- autoplot(Cl(GOLD))
p1 + p2
EDIT 按照 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),aes(color = "GOLD")) +
xlab("Index") + ylab("x")
,
使用 cbind
然后 autoplot
创建一个组合的 xts/zoo 对象。如果您希望每个都在自己的面板中,请省略 facet=NULL
。如果您想先标准化价格,请使用 scale(closes)
代替 closes
。 autoplot
行的输出显示在末尾。
closes <- cbind(Cl(AAPL),Cl(GOLD))
autoplot(closes,facet = NULL)
许多股票
如果有很多股票并且我们不想单独cbind
它们,那么我们可以使用此代码来创建closes
。
tickers <- c("AAPL","GOLD")
getSymbols(tickers,to = end,env = stocks <- new.env())
closes <- do.call("cbind",eapply(stocks,Cl))
或者我们可以使用上面的假设 tickers
的代码:
getSymbols(tickers,to = end)
closes <- do.call("cbind",lapply(mget(tickers),Cl))