微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何组合由自动绘图创建的两个图形?

如何解决如何组合由自动绘图创建的两个图形?

让我们考虑两种金融资产(苹果和黄金):

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

enter image description here

autoplot(Cl(GOLD))

enter image description here

但是我不知道如何将它们都放在一张图表上。我试图寻找解决方案,但他们都没有使用 autoplot() 函数。在一个坐标系上有两个上述图形是否可行?

我正在寻找类似的东西,但是是用 autoplot()

创建的
ggplot()+geom_line(aes(x = 1:945,y = Cl(AAPL)))+geom_line(aes(x = 1:945,y = Cl(GOLD)))

enter image description here

解决方法

使用例如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) 代替 closesautoplot 行的输出显示在末尾。

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

输出

screenshot

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。