ggplot переупорядочивает гистограмму с накоплением на основе значений во фрейме данных

Я делаю составные гистограммы с помощью ggplot2 в R с определенным порядком столбцов по оси y.

# create reproducible data
library(ggplot2)
d <- read.csv(text='Day,Location,Length,Amount
            1,4,3,1.1
            1,3,1,2
            1,2,3,4
            1,1,3,5
            2,0,0,0
            3,3,3,1.8
            3,2,1,3.54
            3,1,3,1.1',header=T)

ggplot(d, aes(x = Day, y = Length)) + geom_bar(aes(fill = Amount, order = Location), stat = "identity")

ggplot(d, aes(x = Day, y = Length)) + geom_bar(aes(fill = Amount, order = rev(Location)), stat = "identity")

Первый график ggplot показывает данные в порядке Location, с Location = 1, ближайшим к оси x, и данные для каждого увеличивающегося значения Location складываются после следующего.

Второй график ggplot показывает данные в другом порядке, но он не складывает данные с наивысшим значением Location, ближайшим к оси x, с данными для следующего самого высокого местоположения, сложенными за секунду от положения оси x для первый столбец столбца, как я и ожидал, основан на более ранней публикации.

Следующий фрагмент действительно показывает данные желаемым образом, но я думаю, что это артефакт простого и небольшого набора данных примера. Порядок наложения не указан, поэтому я думаю, что ggplot складывается на основе значений для Amount.

ggplot(d, aes(x = Day, y = Length)) + geom_bar(aes(fill = Amount), stat = "identity")

Я хочу заставить ggplot складывать данные в порядке убывания значений местоположения (Location = 4, ближайший к оси x, Location = 3 next, ... и Location = 1, самое вверху столбца столбца), вызвав order = или другой эквивалентный аргумент. Есть мысли или предложения?

Кажется, это должно быть легко, потому что я имею дело только с числами. Не должно быть так сложно попросить ggplot складывать данные таким образом, чтобы это соответствовало столбцу убывающих (по мере удаления от оси x) чисел, не так ли?


person James    schedule 09.06.2015    source источник
comment
@VeerendraGadekarm не совсем, я раньше не видел использования эстетики order.   -  person BrodieG    schedule 09.06.2015


Ответы (1)


Пытаться:

ggplot(d, aes(x = Day, y = Length)) + 
  geom_bar(aes(fill = Amount, order = -Location), stat = "identity")

Обратите внимание, как я поменял местами rev на -. Использование rev делает что-то совсем другое: оно складывается по значению для каждой строки, которую вы случайно получите, если вы измените порядок значений в столбце Location, что может быть практически любым.

person BrodieG    schedule 09.06.2015