Как уменьшить пропускную способность в 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")