Заполнение области под линейным графиком в ggplot2: geom_area()

Для данных:

    def.percent period  valence
1   6.4827843   1984-1985   neg
2   5.8232425   1985-1986   neg
3   -2.4003260  1986-1987   pos
4   -3.5994399  1987-1988   pos

Если я добавлю линию к точкам, как я могу использовать ggplot2 для окрашивания области под линией [geom_area()] разными цветами для значений валентности «neg» и «pos»?

Я пробовал это:

ggplot(data, aes(x=period, y=def.percent, group = 1)) +
geom_area(aes(fill=valence)) +
geom_line() + geom_point() + geom_hline(yintercept=0)

Но R возвращает ошибку:

Error: Aesthetics can not vary with a ribbon

Этот же код работает для другого набора данных, я не понимаю, что здесь происходит, например:

library(gcookbook) # For the data set
cb <- subset(climate, Source=="Berkeley")
cb$valence[cb$Anomaly10y >= 0] <- "pos"
cb$valence[cb$Anomaly10y < 0] <- "neg"

ggplot(cb, aes(x=Year, y=Anomaly10y)) +
  geom_area(aes(fill=valence)) +
  geom_line() +
  geom_hline(yintercept=0)

person TWest    schedule 25.02.2015    source источник


Ответы (1)


Это происходит потому, что в вашем случае period является категориальной, то есть переменной factor. Если вы конвертируете его в numeric, он отлично работает:

Данные

df <- read.table(header=T, text='  def.percent period  valence
1   6.4827843   1984   neg
2   5.8232425   1985   neg
3   -2.4003260  1986   pos
4   -3.5994399  1987   pos')

Решение

ggplot(df, aes(x=period, y=def.percent)) +
  geom_area(aes(fill=valence)) +
  geom_line() + geom_point() + geom_hline(yintercept=0)

участок

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

person LyzandeR    schedule 25.02.2015
comment
Обратите внимание, что рабочий код в вопросе также имеет эти неокрашенные области. - person blakeoft; 26.02.2015
comment
Да, было бы неплохо, если бы мы могли избавиться от неокрашенных областей. - person TWest; 28.06.2018