0

我正在尝试用 3geom_line秒创建一个简单的 ggplot 来显示正常、5 年和 10 年的移动平均线。我的数据框是tempAverageTemperature。但是我无法理解以下错误:

Error: Columns 'y', 'colour' must be 1d atomic vectors or lists,

Error: 'mapping' must be created by 'aes()'

我没有名为 y 或 color 的列以及我的所有映射。其他答案似乎无法解释错误背后的原因。我的代码如下:

library(ggplot2)
library(forecast)
ma <- ma(temp$AverageTemperature, order = 5)
ma2 <- ma(temp$AverageTemperature, order = 10)

ggplot(temp, x= dt) + 
    geom_line(temp, aes(y = AverageTemperature, size = 1.5)) + scale_y_log10() + xlim(1870, 2000) +
    geom_line(temp, aes(y = ma, color = ma, size = 1.5)) +  
    geom_line(temp, aes(y = ma2, color = ma, size = 1.5)) `

我需要的结果如下图所示:

https://www.datascience.com/hs-fs/hubfs/learn-data-science-forecasting-with-ARIMA-chart-3.png?width=1900&height=713&name=learn-data-science-forecasting-with- ARIMA-chart-3.png

样本数据使用dput

structure(list(dt = c(1743L, 1744L, 1745L, 1750L, 1751L, 1752L ), AverageTemperatureUncertainty = c(3.1304125, 3.0976671875, 3.00175, 3.13747272727273, 3.09229285714285, 3.06561458333333 )), row.names = c(NA, 6L), class = "data.frame")

有人可以解释一下错误是什么吗?

非常感谢。

4

1 回答 1

2

您遇到的错误主要是由于括号内和aes括号外的内容。这些应包含所有且仅针对每个数据点变化的值:

  • Columns 'y', 'colour'指的是您的y = may = ma2部分(以及color =随后的部分)。在您上面的调用中,它正在查看temp第一个括号中定义的数据框,ggplot并且无法找到这些变量。
  • 您不希望颜色因数据点而异,因此在每次geom_line调用中将其从括号中取出aes()并将其设置为恒定颜色。
  • size = 1.5在每次调用中跨变量也是恒定的geom_line,所以应该在aes().
  • 'mapping' must be created by 'aes()'可能指的是您x = dtggplot括号中的部分(这也应该在aes()括号中),以及temp在每个后续geom_line括号中的调用。

计算移动平均值并将它们组合到原始数据框中会更容易和更整洁:

library(dyplr)
library(ggplot2)

set.seed(1421)
ma <- function(x,order=5){stats::filter(x,rep(1/order,order), sides=2)}

temp<-tibble(AverageTemperature=rnorm(131, 10, 3), dt=seq(1870,2000))



ma1 <- ma(temp$AverageTemperature, order = 5)
ma2 <- ma(temp$AverageTemperature, order = 10)

temp$ma1 <- ma1
temp$ma2 <- ma2

ggplot(temp, aes(x = dt)) + 
  geom_line(aes(y = AverageTemperature), color="orange", size = 1.5) + scale_y_log10() + xlim(1870, 2000) +
  geom_line(aes(y = ma1), color = "red", size = 1.5) +  
  geom_line(aes(y = ma2), color = "blue", size = 1.5)

给出图表(来自随机生成的值):

示例图

(我已经创建ma了一个新功能)

这有帮助吗?你需要玩弄颜色等以适应。

编辑:实际上看到上面的尼尔森代码更方便放入图例。而不是我上面代码中的最后一个ggplot命令,您可以这样做:

temp %>% gather("id","value",c(1,3,4)) %>% 
ggplot(aes(dt,value,col=id))+
geom_line(size=1.5)+scale_y_log10() +
xlim(1870, 2000)
于 2019-01-14T14:28:30.073 回答