Я использую ggplot (v1.0.1) для построения гистограмм с заполнением штрихов, преобразованных в двоичный коэффициент State
, и используя position = "dodge"
. Гистограммы фасетятся вторым фактором Group
. Когда один уровень фактора State
отсутствует в группе, график для этого аспекта отличается от графика, в котором присутствуют оба уровня. Следующий пример иллюстрирует это игрушка:Предотвращение падения уровня фактора в гистограммы ggplot с фасеткой
set.seed(1234)
states <- c("Alive", "Dead")
dat <- data.frame(Group = rep(LETTERS[1:2], each=100),
Measure = rnorm(200, 50, 10),
State = c(rep(states, 50), rep("Alive", 100)))
ggplot() +
geom_histogram(data=dat, aes(x=Measure, fill=State),
position="dodge", binwidth=5) +
facet_wrap(~ Group)
То, что я хотел бы для баров в фаской для группы B имеют одинаковую ширину и относительное положение, как те, для группы А. Я думал facet_wrap(~ Group, drop = FALSE)
выполнит это, но это, похоже, не имеет никакого эффекта. Следующая работа вокруг достигает желаемый участок:
dat <- rbind(dat, data.frame(Group="B", Measure=50, State=NA))
ggplot() +
geom_histogram(data=dat, aes(x=Measure, fill=State),
position="dodge", binwidth=5) +
scale_fill_discrete(na.value = NA) +
facet_wrap(~ Group)
Но я уверен, что я должен быть отсутствующим вариантом ggplot, что бы выполнить это без необходимости взламывать данные.
'ggplot', как правило, очень хорош при построении данных в вашем фрейме данных, я не уверен, что я подумал бы о том, чтобы сделать ваш фрейм данных более подходящим для того, что вы хотите построить« взломать данные ». 'tidyr' имеет функцию' complete() 'только для такого преобразования. – Gregor
В строгом смысле, ваш сюжет не является гистограммой. Вместо использования 'position_dodge', я бы использовал прозрачность« alpha »или другое измерение огранки. – Roland
@Gregor спасибо за отзыв о функции tidyr – michael