Генерировать парные гистограммы в 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)