title: ggplot2: change break points of discrete scale to be between two break points
body: <p>I have the following dataset:</p>
  
  <pre><code>df &lt;- data.frame(dens = rnorm(5000),
               split = as.factor(sample(1:2, 5000, replace = T)),
               method = as.factor(sample(c("A","B"), 5000, replace = T)),
               counts = sample(c(1, 10, 100, 1000, 10000), 5000, replace = T))
  </code></pre>
  
  <p>I have the following split violin plots for splits 1 and 2 within groups A and B for each count. We have four groups for each setting but there is a nested aspect to it:</p>
  
  <pre><code>library(ggplot2)
  GeomSplitViolin &lt;- ggproto("GeomSplitViolin", GeomViolin, 
                             draw_group = function(self, data, ..., draw_quantiles = NULL){
                                 ## By @YAK: https://stackoverflow.com/questions/35717353/split-violin-plot-with-ggplot2
                                 data &lt;- transform(data, xminv = x - violinwidth * (x - xmin), xmaxv = x + violinwidth * (xmax - x))
                                 grp &lt;- data[1,'group']
                                 newdata &lt;- plyr::arrange(transform(data, x = if(grp%%2==1) xminv else xmaxv), if(grp%%2==1) y else -y)
                                 newdata &lt;- rbind(newdata[1, ], newdata, newdata[nrow(newdata), ], newdata[1, ])
                                 newdata[c(1,nrow(newdata)-1,nrow(newdata)), 'x'] &lt;- round(newdata[1, 'x']) 
                                 if (length(draw_quantiles) &gt; 0 &amp; !scales::zero_range(range(data$y))) {
                                     stopifnot(all(draw_quantiles &gt;= 0), all(draw_quantiles &lt;= 1))
                                     quantiles &lt;- create_quantile_segment_frame(data, draw_quantiles, split = TRUE, grp = grp)
                                     aesthetics &lt;- data[rep(1, nrow(quantiles)), setdiff(names(data), c("x", "y")), drop = FALSE]
                                     aesthetics$alpha &lt;- rep(1, nrow(quantiles))
                                     both &lt;- cbind(quantiles, aesthetics)
                                     quantile_grob &lt;- GeomPath$draw_panel(both, ...)
                                     ggplot2:::ggname("geom_split_violin", grid::grobTree(GeomPolygon$draw_panel(newdata, ...), quantile_grob))
                                 }
                                 else {
                                     ggplot2:::ggname("geom_split_violin", GeomPolygon$draw_panel(newdata, ...))
                                 }
                             }
                             )
  
  create_quantile_segment_frame &lt;- function (data, draw_quantiles, split = FALSE, grp = NULL) {
      dens &lt;- cumsum(data$density)/sum(data$density)
      ecdf &lt;- stats::approxfun(dens, data$y)
      ys &lt;- ecdf(draw_quantiles)
      violin.xminvs &lt;- (stats::approxfun(data$y, data$xminv))(ys)
      violin.xmaxvs &lt;- (stats::approxfun(data$y, data$xmaxv))(ys)
      violin.xs &lt;- (stats::approxfun(data$y, data$x))(ys)
      if (grp %% 2 == 0) {
          data.frame(x = ggplot2:::interleave(violin.xs, violin.xmaxvs), 
                     y = rep(ys, each = 2), group = rep(ys, each = 2)) 
      } else {
          data.frame(x = ggplot2:::interleave(violin.xminvs, violin.xs), 
                     y = rep(ys, each = 2), group = rep(ys, each = 2)) 
      }
  }
  
  geom_split_violin &lt;- function (mapping = NULL, data = NULL, stat = "ydensity", position = "identity", ..., draw_quantiles = NULL, trim = TRUE, scale = "area", na.rm = FALSE, show.legend = NA, inherit.aes = TRUE) {
      layer(data = data, mapping = mapping, stat = stat, geom = GeomSplitViolin, position = position, show.legend = show.legend, inherit.aes = inherit.aes, params = list(trim = trim, scale = scale, draw_quantiles = draw_quantiles, na.rm = na.rm, ...))
  }
  
  
  
  df$key &lt;- factor(paste(df$split, df$method))
  
  levels(df$split) &lt;- factor(0:2)
  library(ggplot2)
  ggplot(df, aes(x = interaction(split, counts), y = dens, fill = key)) +geom_split_violin(draw_quantiles = c(0.25, 0.5, 0.75)) +scale_fill_manual(values=RColorBrewer::brewer.pal(name="Paired",n=4)) + theme_light() + theme(legend.position="bottom") + scale_x_discrete(limits=levels(interaction(df$split,df$counts))[-length(levels(interaction(df$split,df$counts)))],drop = FALSE, name = "Counts")
  </code></pre>
  
  <p>And I get the following:</p>
  
  <p><a href="https://i.stack.imgur.com/VdfkB.png" rel="nofollow noreferrer"><img src="https://i.stack.imgur.com/VdfkB.png" alt="enter image description here"></a></p>
  
  <p>Which is great, except that I would like to only have labels of counts 1, 10, 100, 1000, 10000 on the x-axis and in between the blue and the green violin plots. So label 1 in between the first blue and the green violin plots, 10 in between the second blue and the green violin plots, 100  in between the second blue and the green violin plots and so on. </p>
  
  <p>Thanks for any suggestions on how to do this.</p>