2015-02-25 2 views
4

Для данных:Заполнение площади под линейного графика в 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) 

ответ

7

Это происходит потому, что в вашем случае 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) 

Участок

enter image description here

+0

Обратите внимание, что рабочий код в вопросе также есть эти неокрашенные области. – blakeoft