Как уменьшить пропускную способность в geom_bar для одного бара?

Я пытаюсь получить линейный график, используя ggplot's geom_bar(), Вот некоторые примеры данных, которые я составил для целей репликации:

dat <- data.frame("x"=c(rep(c(1,2,3,4,5),5)),
                  "by"=c(NA,0,0,0,0,NA,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1))

Я хочу построить "х" сгруппированы по "по". Теперь, потому что мне не нужно строить NA значения, которые я отфильтровал для !is.na(by))

library(dplyr)
dat <- filter(dat, !is.na(by))

Теперь о сюжете:

library(ggplot2)
ggplot(dat, aes(x=x, fill=as.factor(by))) + geom_bar(position="dodge") + theme_tufte()

Это возвращает то, что мне нужно; почти. К сожалению, первая полоса выглядит действительно странно, потому что ее пропускная способность в два раза выше (из-за того, что для "x"==1 нет нулей в "by").

Есть ли способ уменьшить ширину бина для первого бара обратно на "нормальный"?

2 ответа

Решение

Неважно, я просто понял, что вы можете манипулировать binwidth аргумент с использованием ifelse заявление.

...geom_bar(..., binwidth = ifelse("by"==1 & is.na("x"), .5, 1)))

Так что если вы поиграете с этим, это сработает. По крайней мере, у меня это сработало.

Вы также можете сделать это так. Пересчитать таблицу и использовать geom_col,

ggplot(as.data.frame(table(dat)), aes(x = x, y = Freq, fill = by)) +
  theme_bw() +
  geom_col(position = "dodge")

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