Как вручную изменить группировку только что сложенной части сложенной + сгруппированной гистограммы ggplot

Я следую примеру, приведенному в этом посте, для создания сгруппированной и сложенной гистограммы: -in-r">Как создать стопку столбцов внутри сгруппированной гистограммы в R

Из этого поста:

library(reshape2)
library(dplyr)
library(ggplot2)

test  <- data.frame(person=c("A", "B", "C", "D", "E"), 
                value1=c(100,150,120,80,150),     
                value2=c(25,30,45,30,30) , 
                value3=c(100,120,150,150,200)) 


melted <- melt(test, "person")

melted$cat <- ''
melted[melted$variable == 'value1',]$cat <- "first"
melted[melted$variable != 'value1',]$cat <- "second"


ggplot(melted, aes(x = cat, y = value, fill = variable)) + 
 geom_bar(stat = 'identity', position = 'stack') + 
 facet_grid(~ person)

Как показано выше, график упорядочивает значение2 поверх значения3.

То, что я пытаюсь сделать, это изменить порядок сложенной части, т.е. Я хотел бы разместить значение3 поверх значения2.

Я попытался вручную изменить порядок переменной:

melted2 <- melted %>% 
  arrange(desc(variable))

ggplot(melted2, aes(x = cat, y = value, fill = variable)) + 
 geom_bar(stat = 'identity', position = 'stack') + 
 facet_grid(~ person)

Но вывод сюжета выглядит идентично первому. По существу, переупорядочение входных данных не решает задачу.

Заранее спасибо!


person Tom A    schedule 02.05.2017    source источник
comment
Прочтите мой пост. Я попытался изменить порядок, как показано в этом посте.   -  person Tom A    schedule 02.05.2017
comment
Нет никаких признаков того, что вы изменили порядок уровней — только значения. Вам нужно явно упорядочить уровни факторов. Попробуйте ?factor или ?reorder.   -  person Roman Luštrik    schedule 03.05.2017


Ответы (1)


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

melted$variable <- factor(melted$variable, levels = c("value1","value3","value2"))

ggplot(melted, aes(x = cat, y = value, fill = variable)) + 
 geom_bar(stat = 'identity', position = 'stack') + 
 facet_grid(~ person)

Этот подход, который вы использовали ранее, только упорядочивает значения в порядке их значения.

melted2 <- melted %>% 
  arrange(desc(variable))

Лучше работает для непрерывных векторов. Вам действительно нужно изменить уровни фактора. Вы можете проверить уровни, используя это:

levels(melted$variable)

[1] "значение1" "значение3" "значение2"

melted$variable уже был фактором, но вам просто нужно было изменить уровни по умолчанию на то, что вы хотели.

person boshek    schedule 02.05.2017
comment
Идеально! Это сделало это. Я приму ответ через 3 минуты, когда это будет разрешено. - person Tom A; 02.05.2017