当我在ggplot2中绘制条形图时,我想将条形底部和x轴之间的空间缩小为0,同时将空间保持在条形图和绘图框上方。我有一个黑客在下面这样做。它很脏,我想再次清洁。有没有办法在没有肮脏的小黑客的情况下实现这种行为?
默认(上面所需的空格但不希望空格下方的空格):
ggplot(mtcars, aes(x=as.factor(carb))) +
geom_bar()
使用展开(上面不需要的0个空格,但在条形下面有0个空格):
ggplot(mtcars, aes(x=as.factor(carb))) +
geom_bar() +
scale_y_continuous(expand = c(0,0))
肮脏的黑客(我喜欢它,但它......好吧,很脏):
ggplot(mtcars, aes(x=as.factor(carb))) +
geom_bar() +
scale_y_continuous(expand = c(0,0)) +
geom_text(aes(x=1, y=10.3, label="Stretch it"), vjust=-1)
答案 0 :(得分:34)
我可能会错过你真正想要的东西,但是如果不使用geom_text
黑客,你仍然可以设置限制
ggplot(mtcars, aes(x = as.factor(carb))) +
geom_bar() +
scale_y_continuous(expand = c(0, 0), limits = c(0, 10.3))
# marginally cleaner
答案 1 :(得分:18)
您可以手动扩展限制,例如使用expand_limits(y=10.1)
,或使用此技巧添加带有按比例放大的数据的不可见图层
ggplot(mtcars, aes(x=as.factor(carb))) +
geom_bar() +
scale_y_continuous(expand = c(0,0)) +
geom_blank(aes(y=1.1*..count..), stat="bin")
答案 2 :(得分:11)
由于expansion
自ggplot2 v3.3.0 release起已被弃用,R文档为expand
参数提供了一个名为expand_scale()
的新便利函数。
ggplot(mtcars) +
geom_bar(aes(x = factor(carb))) +
scale_y_continuous(expand = expansion(mult = c(0, .1)))
答案 3 :(得分:8)
因为你似乎对某些硬编码感到满意......
ggplot(mtcars, aes(x = as.factor(carb))) +
geom_bar() +
coord_cartesian(ylim = c(0, 10.3))
答案 4 :(得分:3)
这是一种自动生成顶部间距的方法,但删除底部间距。我使用3%填充,因为那是你硬编码的。
plot1 <- ggplot(mtcars, aes(x=as.factor(carb))) +
geom_bar()
plotInfo <- print(plot1)
yMax <- max(plotInfo$data[[1]]$ymax)
yLimitMax <- 1.03 * yMax
plot2 <- plot1 +
scale_y_continuous(expand = c(0,0),
limits = c(0,yLimitMax))
如果您想删除图表之间的三行,只需在plot2
中写一下:
limits = c(0, 1.03 * max(print(plot1)$data[[1]]$ymax))