错误:列y,颜色必须是一维原子向量或列表。我没有颜色栏

时间:2019-01-14 12:05:44

标签: r ggplot2 forecast

我正在尝试使用3个geom_line创建一个简单的ggplot,以显示正常的5年和10年移动平均值。我的数据框为temp,列为AverageTemperature。但是我无法理解以下错误:

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

请问有人可以解释什么错误吗?

非常感谢。

1 个答案:

答案 0 :(得分: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 = dt括号中的ggplot部分(也应放在aes()括号中),也指{{1 }},放在随后的每个temp括号中。

计算移动平均值并将其合并到原始数据框中会更容易,更整齐:

geom_line

提供图形(从随机生成的值):

sample graph

(我已经将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) 创建为新功能)

这有帮助吗?您需要尝试各种颜色等以适合自己。

编辑:实际上看到的是Nelson的代码,在插入图例时比较方便。代替上面的代码中的最后一个ma命令,您可以执行以下操作:

ggplot