`Error: Columns `y`, `colour` must be 1d atomic vectors or lists`. I have no column `colour`
`Error: Columns `y`, `colour` must be 1d atomic vectors or lists`. I have no column `colour`
我正在尝试创建一个包含 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)) `
我需要的结果如下图所示:
示例数据使用 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")
有人可以解释一下错误是什么吗?
非常感谢。
您遇到的错误主要是由于 aes
括号内外的内容。这些应该包含所有且仅包含每个数据点不同的值:
Columns 'y', 'colour'
指的是您的 y = ma
和 y = ma2
部分(以及后面的 color =
位)。在您上面的调用中,它正在查看第一个 ggplot
括号中定义的数据框 temp
内部,无法找到这些变量。
- 您不希望颜色因数据点而异,因此在每个
geom_line
调用中将其从 aes()
括号中取出并将其设置为常量颜色。
size = 1.5
在每个 geom_line
调用中跨变量也是常量,因此应该在 aes()
. 之外
'mapping' must be created by 'aes()'
可能指的是 ggplot
括号中的 x = dt
部分(这也应该在 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
作为新函数)
这有帮助吗?您需要尝试调整颜色等以适应。
编辑:实际上看到了上面的 Nelson 代码,它更便于放入图例。你可以代替上面代码中的最后一个 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)
我正在尝试创建一个包含 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)) `
我需要的结果如下图所示:
示例数据使用 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")
有人可以解释一下错误是什么吗?
非常感谢。
您遇到的错误主要是由于 aes
括号内外的内容。这些应该包含所有且仅包含每个数据点不同的值:
Columns 'y', 'colour'
指的是您的y = ma
和y = ma2
部分(以及后面的color =
位)。在您上面的调用中,它正在查看第一个ggplot
括号中定义的数据框temp
内部,无法找到这些变量。- 您不希望颜色因数据点而异,因此在每个
geom_line
调用中将其从aes()
括号中取出并将其设置为常量颜色。 size = 1.5
在每个geom_line
调用中跨变量也是常量,因此应该在aes()
. 之外
'mapping' must be created by 'aes()'
可能指的是ggplot
括号中的x = dt
部分(这也应该在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
作为新函数)
这有帮助吗?您需要尝试调整颜色等以适应。
编辑:实际上看到了上面的 Nelson 代码,它更便于放入图例。你可以代替上面代码中的最后一个 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)