ggplot2条形图,geom底部和x轴之间没有空间,保持上面的空间

时间:2013-11-26 14:54:19

标签: r ggplot2

当我在ggplot2中绘制条形图时,我想将条形底部和x轴之间的空间缩小为0,同时将空间保持在条形图和绘图框上方。我有一个黑客在下面这样做。它很脏,我想再次清洁。有没有办法在没有肮脏的小黑客的情况下实现这种行为?

默认(上面所需的空格但不希望空格下方的空格):

ggplot(mtcars, aes(x=as.factor(carb))) + 
    geom_bar()

enter image description here

使用展开(上面不需要的0个空格,但在条形下面有0个空格):

ggplot(mtcars, aes(x=as.factor(carb))) + 
    geom_bar() + 
    scale_y_continuous(expand = c(0,0)) 

enter image description here

肮脏的黑客(我喜欢它,但它......好吧,很脏):

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)

enter image description here

5 个答案:

答案 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)

由于expansionggplot2 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))