如何减少geom_bar中单个条的宽度?

时间:2018-12-04 12:27:40

标签: r ggplot2 geom-bar

我正在尝试使用ggplot的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))

我想绘制按“ by”分组的“ x”。现在,因为不需要绘制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()

这返回了我所需要的;几乎。不幸的是,第一个小节看起来真的很奇怪,因为它的binwidth是原来的两倍(由于“ x” == 1,“ by”中没有零)。

是否有办法将第一个小节的binwidth减小回“正常”? enter image description here

2 个答案:

答案 0 :(得分:1)

您也可以这样做。预先计算表格并使用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

答案 1 :(得分:0)

没关系,我只是发现您可以使用binwidth语句来操纵ifelse参数。

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

因此,如果您尝试使用它,它将起作用。至少对我有用。