Генерировать парные гистограммы в ggplot (используя position_dodge только для некоторых переменных)

Я надеюсь использовать ggplot2 для генерации набора сгруппированных баров в парах, примерно так:

Пример столбцов с накоплением

Со следующими примерами данных:

df <- expand.grid(name = c("oak","birch","cedar"),
        sample = c("one","two"),
        type = c("sapling","adult","dead"))
df$count <- sample(5:200, size = nrow(df), replace = T)

Я хотел бы, чтобы ось X представляла название дерева, с двумя столбцами для каждого вида деревьев: один столбец для образца один и один столбец для образца два. Тогда цвета каждого бара должны быть определены по типу.

Следующий код генерирует составную полосу с цветами по типу:

ggplot(df, aes(x = name, y = count, fill = type)) + geom_bar(stat = "identity")

А следующий код генерирует уклоненные столбцы по образцу:

ggplot(df, aes(x = name, y = count, group = sample)) + geom_bar(stat = "identity", position = "dodge")

Но я не могу заставить его увернуться от одной из групп (образец) и сложить другую группу (тип):

ggplot(df, aes(x = name, y = count, fill = type, group = sample)) + geom_bar(stat = "identity", position = "dodge")

1 ответ

Решение

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

ggplot(df, aes(x = as.numeric(interaction(sample,name)), y = count, fill = type)) + 
  geom_bar(stat = "identity",color="white") +
  scale_x_continuous(breaks=c(1.5,3.5,5.5),labels=c("oak","birch","cedar"))

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

Другое решение заключается в использовании граней для name а также sample как значения х.

ggplot(df,aes(x=sample,y=count,fill=type))+
  geom_bar(stat = "identity",color="white")+
  facet_wrap(~name,nrow=1)

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

Другие вопросы по тегам