Ошибки, которые вы получаете, в основном связаны с тем, что находится внутри и вне скобок aes
. Они должны содержать все и только значения, которые варьируются для каждой точки данных:
Columns 'y', 'colour'
относится к вашим y = ma
и y = ma2
частям (и color =
битам, которые следуют). В ваших звонках выше он просматривает фрейм данных temp
, как определено в первой скобке ggplot
, и не может найти эти переменные.
- Вы не хотите, чтобы цвет менялся в зависимости от точки данных, поэтому при каждом вызове
geom_line
вынимайте это из скобки aes()
и устанавливайте его как постоянный цвет.
size = 1.5
также является постоянной величиной для переменных в каждом вызове geom_line
, поэтому должно быть за пределами aes()
.
'mapping' must be created by 'aes()'
относится, вероятно, как к вашей x = dt
части в ggplot
скобке (это также должно быть в 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)