65

如何增加ggplot2条形图中条形之间的空间?

4

4 回答 4

71

您可以随时使用width参数,如下所示:

df <- data.frame(x=factor(LETTERS[1:4]), y=sample(1:100, 4))
library(ggplot2)
ggplot(data=df, aes(x=x, y=y, width=.5)) + 
  geom_bar(stat="identity", position="identity") +
  opts(title="width = .5") + labs(x="", y="") +
  theme_bw()

与以下其他设置进行比较width

替代文字

到目前为止,一切都很好。现在,假设我们有两个因素。如果您想使用均匀间隔的并列条(例如与inspace一起使用时),使用起来并不容易:您可以更改条宽,但不能在相邻条之间添加空间(我没有找到方便的谷歌上的解决方案)。我最终得到了类似的东西:beside=TRUEbarplot()geom_bar(position="dodge")

df <- data.frame(g=gl(2, 1, labels=letters[1:2]), y=sample(1:100, 4))
x.seq <- c(1,2,4,5)
ggplot(data=transform(df, x=x.seq), aes(x=x, y=y, width=.85)) +
  geom_bar(stat="identity", aes(fill=g)) + labs(x="", y="") + 
  scale_x_discrete(breaks = NA) + 
  geom_text(aes(x=c(sum(x.seq[1:2])/2, sum(x.seq[3:4])/2), y=0, 
                label=c("X","Y")), vjust=1.2, size=8)

用于 $x$ 轴的向量在 data.frame 中“注入”,因此您可以根据需要更改外部间距,同时width允许控制内部间距。$x$-axis 的标签可以通过使用scale_x_discrete().

替代文字

于 2011-01-13T08:16:00.253 回答
53

对于因子条之间的空间,请使用

ggplot(data = d, aes(x=X, y=Y, fill=F)) 
 + geom_bar(width = 0.8, position = position_dodge(width = 0.9))

geom_bar 中的宽度控制相对于 x 轴的条形宽度,而 position_dodge 中的宽度控制给定两个条形的空间宽度也相对于 x 轴。玩弄宽度以找到您喜欢的宽度。

于 2013-01-24T14:22:57.573 回答
2

非常感谢你!我有同样的问题,你帮我解决了。我没有使用 geom_text 添加 X-labels 我使用 scale_x_continuous (见下文)

geom_text(aes(x=c(sum(x.seq[1:2])/2, sum(x.seq[3:4])/2), y=0, 
            label=c("X","Y")), vjust=1.2, size=8)

取而代之

scale_x_continuous(breaks=c(mean(x.seq[1:2]), mean(x.seq[3:4])), labels=c("X", "Y")) 
于 2015-04-24T10:48:38.320 回答
1

对于 POSIXlt 条之间的空间,您需要根据一天中的秒数调整宽度

# POSIXlt example: full & half width
d <- data.frame(dates = strptime(paste(2016, "01", 1:10, sep = "-"), "%Y-%m-%d"),
            values = 1:10)

ggplot(d, aes(dates, values)) +
  geom_bar(stat = "identity", width = 60*60*24) 

ggplot(d, aes(dates, values)) +
  geom_bar(stat = "identity", width = 60*60*24*0.5) 
于 2016-08-29T13:33:57.587 回答