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

Я пытаюсь получить линейный график, используя 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))

Я хочу построить «x», сгруппированный по «by».Теперь, поскольку мне не нужно отображать 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»).

Есть ли способуменьшить пропускную способность для первого бара обратно на «нормальный»?enter image description here

Ответы [ 2 ]

0 голосов
/ 04 декабря 2018

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

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

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

0 голосов
/ 04 декабря 2018

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

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

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...