Constant width in ggplot barplots

前端 未结 2 1908
忘了有多久
忘了有多久 2021-01-05 05:25

How to make the width of bars and spaces between them fixed for several barplots using ggplot, having different number of bars on each plot?

Here is a f

2条回答
  •  星月不相逢
    2021-01-05 06:09

    Wrapped the other suggestions in a function that only requires a single graph.

    fixedWidth <- function(graph, width=0.1) {
      g2 <- graph
    
      #store the old widths
      old.unit <- g2$grobs[[4]]$children[[2]]$width[[1]]
      original.attibutes <- attributes(g2$grobs[[4]]$children[[2]]$width)
    
      #change the widths
      g2$grobs[[4]]$children[[2]]$width <- rep(width,
                                               length(g2$grobs[[4]]$children[[2]]$width))
    
      #copy the attributes (units)
      attributes(g2$grobs[[4]]$children[[2]]$width) <- original.attibutes
    
      #position adjustment (why are the bars justified left???)
      d <- (old.unit-g2$grobs[[4]]$children[[2]]$width[[1]])/2
      attributes(d) <- attributes(g2$grobs[[4]]$children[[2]]$x)
      g2$grobs[[4]]$children[[2]]$x <- g2$grobs[[4]]$children[[2]]$x+d
    
      return(g2)
    }
    

提交回复
热议问题