ggplot2 bar plot, no space between bottom of geom and x axis keep space above

前端 未结 6 1064
逝去的感伤
逝去的感伤 2020-11-30 00:37

When I plot a bar graph in ggplot2 I would like to reduce the space between the bottom of the bars and the x-axis to 0, yet keep the space above the bars and the plot box.

相关标签:
6条回答
  • 2020-11-30 00:46

    This is an automatic way to produce the spacing at the top, yet remove the bottom spacing. I use 3 % padding since that's what you hard-coded.

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

    If you want to remove the three lines between the plots, just write this in plot2 instead:

    limits = c(0, 1.03 * max(print(plot1)$data[[1]]$ymax))
    
    0 讨论(0)
  • 2020-11-30 00:50

    Because you seem comfortable with some hardcoding...

    ggplot(mtcars, aes(x = as.factor(carb))) + 
      geom_bar() +
      coord_cartesian(ylim = c(0, 10.3))
    
    0 讨论(0)
  • 2020-11-30 00:51

    I might be missing what you really want, but without using geom_text hack you can still set the limits

    ggplot(mtcars, aes(x = as.factor(carb))) + 
        geom_bar() + 
        scale_y_continuous(expand = c(0, 0), limits = c(0, 10.3)) 
    
    # marginally cleaner
    
    0 讨论(0)
  • 2020-11-30 00:55

    The R documentation includes a new convenience function called expansion for the expand argument as the expand_scale() became deprecated as of ggplot2 v3.3.0 release.

    ggplot(mtcars) +
      geom_bar(aes(x = factor(carb))) + 
      scale_y_continuous(expand = expansion(mult = c(0, .1)))
    
    0 讨论(0)
  • 2020-11-30 01:03

    Starting in ggplot2 3.0.0 there is an expand_scale() function that can be used with the expand argument to do exactly this. You define the top and bottom expansion separately.

    ggplot(mtcars, aes(x=factor(carb))) + 
         geom_bar() +
         scale_y_continuous(expand = expand_scale(mult = c(0, .1)))
    
    0 讨论(0)
  • 2020-11-30 01:04

    You can expand the limits manually, e.g. with expand_limits(y=10.1), or use this trick to add an invisible layer with scaled up data,

    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")
    
    0 讨论(0)
提交回复
热议问题