"'来源'必须提供"尝试使用日期字段扩展ggplot时出错

时间:2016-06-03 16:14:07

标签: r ggplot2

我正在编写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

1 个答案:

答案 0 :(得分:0)

我相信答案是必须将日期转换为x轴的整数。

data.frame(x = as.integer(data $ date),...似乎可以解决问题。