如何增加ggplot2条形图中条形之间的空间?
Jana
问问题
96658 次
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=TRUE
barplot()
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 回答