Подтвердить что ты не робот

Ggplot2 и сводная диаграмма с отрицательными значениями

Учитывая следующий набор данных:

   Division Year OperatingIncome
1  A  2012           11460
2  B  2012            7431
3  C  2012           -8121
4  D  2012           15719
5  E  2012             364
6  A  2011           12211
7  B  2011            6290
8  C  2011           -2657
9  D  2011           14657
10 E  2011            1257
11 A  2010           12895
12 B  2010            5381
13 C  2010           -2408
14 D  2010           11849
15 E  2010             517

Как заполнить таблицу гистограмм в ggplot2, которая содержит отрицательные значения? Вот базовая последовательность диаграмм, которую я использую:

ggplot(income_m, aes(x=Year, y=OperatingIncome, fill=Division)) + geom_bar() +
+ scale_fill_brewer(type = "seq", palette = 1)

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

Предупреждающее сообщение: Укладка не определена, когда ymin!= 0

И вместо ожидаемого результата - отрицательные значения отображаются под осью X - они просто не присутствуют в штабелированной гистограмме. Есть ли способ создать диаграмму со всеми значениями, как положительными, так и отрицательными, учтенными?

4b9b3361

Ответ 1

Обновление. По сравнению с ggplot2 2.2.0 стекирование для отрицательных значений обрабатывается автоматически, без необходимости создавать отдельные уровни для положительных и отрицательных значений.

Если я понимаю, что вы ищете, трюк состоит в том, чтобы поместить два положительных и отрицательных данных в отдельные слои, а также использовать stat = "identity":

dat <- read.table(text = "   Division Year OperatingIncome
1  A  2012           11460
2  B  2012            7431
3  C  2012           -8121
4  D  2012           15719
5  E  2012             364
6  A  2011           12211
7  B  2011            6290
8  C  2011           -2657
9  D  2011           14657
10 E  2011            1257
11 A  2010           12895
12 B  2010            5381
13 C  2010           -2408
14 D  2010           11849
15 E  2010             517",header = TRUE,sep = "",row.names = 1)

dat1 <- subset(dat,OperatingIncome >= 0)
dat2 <- subset(dat,OperatingIncome < 0)
ggplot() + 
    geom_bar(data = dat1, aes(x=Year, y=OperatingIncome, fill=Division),stat = "identity") +
    geom_bar(data = dat2, aes(x=Year, y=OperatingIncome, fill=Division),stat = "identity") +
    scale_fill_brewer(type = "seq", palette = 1)

enter image description here