Ошибка geom_rect и ggplot2: эстетика должна быть либо длиной 1, либо такой же, как данные (2)

Я пытаюсь сделать что-то вроде https://stackoverflow.com/a/29649406/15485, но получаю сообщение об ошибке

Ошибка: Эстетика должна быть либо длиной 1, либо такой же, как данные (2): xmin, xmax, ymin, ymax, x, y

Что означает «(2)»?

О какой «эстетике» идет речь? У меня есть aes в ggplot и aes в geom_rect, но я понятия не имею, как их исправить... Боюсь, я никогда не пойму ggplot...

days<-rep(Sys.Date(),100)+seq(1,100)
v<-sin(as.numeric(days))
df<-data.frame(days=days,v=v)

shade <- data.frame(x1=c(as.Date('2017-10-15'),as.Date('2017-11-11')), 
                   x2=c(as.Date('2017-10-20'),as.Date('2017-11-13')), 
                   y1=c(-Inf,-Inf), y2=c(Inf,Inf))

library(ggplot2)
plot(ggplot(df,aes(x=days,y=v))
     +geom_line()
     +geom_rect(data=shade, 
               mapping=aes(xmin=x1, xmax=x2, ymin=y1, ymax=y2), color='grey', alpha=0.2)
     +geom_point())

person Alessandro Jacopson    schedule 15.09.2017    source источник
comment
Кстати, (2) означает, что длина data в настоящее время равна 2. То есть эстетика может быть только 1 или 2, как определено в настоящее время. @ Z.Lin показывает, почему.   -  person Axeman    schedule 15.09.2017


Ответы (1)


Строка geom_rect пыталась унаследовать эстетику по умолчанию от верхней строки ggplot(df, aes(x = days, y = v)).

Следующее будет работать:

ggplot(df, aes(x=days, y=v)) +
  geom_line() +
  geom_rect(data=shade, inherit.aes = F,
            aes(xmin=x1, xmax=x2, ymin=y1, ymax=y2), 
            color = 'grey', alpha=0.2) +
  geom_point()

введите описание изображения здесь

(Я добавил в код больше разрывов строк/пробелов для облегчения чтения. Кроме того, нет необходимости оборачивать весь объект ggplot в plot().)

person Z.Lin    schedule 15.09.2017
comment
Большое спасибо! На самом деле в stackoverflow.com/a/29649406/15485 geom_line есть собственный Aesthetics, а ggplot — нет. - person Alessandro Jacopson; 15.09.2017
comment
В RStudio мне нужно обернуть plot(), иначе график не будет создан... - person Alessandro Jacopson; 15.09.2017
comment
@AlessandroJacopson Это потому, что ваши операторы + находятся в начале следующей строки, а не в конце предыдущей. Переместите их вверх (как в моем примере), и вы увидите график. - person Z.Lin; 15.09.2017
comment
В моей версии RStudio 1.0.153 (в Windows) ваш код не создает сюжет... во всяком случае, я могу это вынести :-) - person Alessandro Jacopson; 15.09.2017
comment
Хм, вы используете скрипт/оборачиваете его в функцию? Это может иметь значение. - person Z.Lin; 15.09.2017
comment
Я думаю, что это источник ... В RStudio я проверил источник при сохранении. Большое спасибо за Вашу помощь! - person Alessandro Jacopson; 15.09.2017