我正在编写ggplot扩展名,以添加类似于quantmod中可用的geoms和stats。实现这一目标的第一步实际上是学习如何扩展ggplot,而且由于我无法理解的错误,我在第一个障碍中摔倒了。以下代码导致以下错误"换行期间出错:' origin'必须提供"。我试过用as.Date(,origin =)包装日期来解决它,但是没有帮助。我想我可能遗漏了一些明显的东西,但我不知道它是什么。
library(TTR)
library(quantmod)
library(ggplot2)
getSymbols("AAPL")
statQSMA <-
ggproto("statQSMA", Stat,
compute_group = function(data, scales) {
data.frame(x = data$date, y = SMA(data$close, n = 20))
},
required_aes = c("date", "close")
)
stat_q_sma <- function(mapping = NULL, data = NULL, geom = "line",
position = "identity", na.rm = FALSE, show.legend = NA,
inherit.aes = TRUE, ...) {
RetVal <- ggplot2::layer(
stat = statQSMA, data = data, mapping = mapping, geom = geom,
position = position, show.legend = show.legend, inherit.aes = inherit.aes,
params = list(na.rm = na.rm, ...)
)
RetVal
}
g <-
ggplot(AAPL) +
geom_line(aes(x = index(AAPL), y = AAPL.Adjusted)) +
stat_q_sma(aes(date = index(AAPL), close = AAPL.Adjusted))
print(g)
如果&#34;索引(AAPL)&#34;改为&#34; 1:nrow(AAPL)&#34;上面的代码工作正常。另外geom_line工作正常,x轴是日期,而不是stat_q_sma。
> head(AAPL)
AAPL.Open AAPL.High AAPL.Low AAPL.Close AAPL.Volume AAPL.Adjusted
2007-01-03 86.29 86.58 81.90 83.80 309579900 11.01952
2007-01-04 84.05 85.95 83.82 85.66 211815100 11.26411
2007-01-05 85.77 86.20 84.40 85.05 208685400 11.18389
2007-01-08 85.96 86.53 85.28 85.47 199276700 11.23912
2007-01-09 86.45 92.98 85.15 92.57 837324600 12.17276
2007-01-10 94.75 97.80 93.45 97.00 738220000 12.75529
答案 0 :(得分:0)
我相信答案是必须将日期转换为x轴的整数。
data.frame(x = as.integer(data $ date),...似乎可以解决问题。