title: Expand y axis to negative numbers on a log10 scale axis in ggplot2
body: <p>I am plotting a combination of points and lines with 2 sets of labels. I want to plot the labels above and below the points as you can see below. At the same time to make it better to read I have used the log10 scale on the y axis and everything is fine except some of the labels are outside of the chart area and I have used and tried every method suggested in many posts to see if I get any favorable result or not. I am looking for either of the solutions:</p>
  
  <p>1- expand the y axis to negative so that the labels can be seen. Note that <code>ylim</code> or <code>limits=c(x,y)</code> is not working for <code>log</code> scale or <code>sqrt</code> scale if the numbers are negative</p>
  
  <p>2- trick the <code>geom_text</code> to make the labels be visible regardless of the y limits. Note that I have tried <code>vjust="inward"</code> and it is working ok, but then I have to use <code>geom_text_repel</code> which moves the labels around and makes it hard to read, so I still like to place the labels right on top and bottom of the points</p>
  
  <p>any helps is appreciated!</p>
  
  <p>Here is the code to generate the data frame:</p>
  
  <pre><code>df1_InSAP_Only &lt;- structure(list(Year_Month = c(
      "2016_06", "2016_06", "2016_07", 
      "2016_07", "2016_08", "2016_08", "2016_09", "2016_09", "2016_09", 
      "2016_09", "2016_10", "2016_10", "2016_10", "2016_10", "2016_11", 
      "2016_11", "2016_12", "2016_12", "2017_01", "2017_01", "2017_01", 
      "2017_02", "2017_02", "2017_02", "2017_02", "2017_03", "2017_03", 
      "2017_03", "2017_03", "2017_03", "2017_03", "2017_04", "2017_04", 
      "2017_04", "2017_04", "2017_04", "2017_05", "2017_05", "2017_05", 
      "2017_05", "2017_05", "2017_05", "2017_06", "2017_06", "2017_06", 
      "2017_06", "2017_06", "2017_06", "2017_07", "2017_07"), 
      Business = c("A", 
       "E", "A", "B", "B", "E", "F", "A", "H", "B", "A", "D", "B", "E", 
       "B", "E", "F", "B", "F", "B", "E", "A", "B", "C", "E", "F", "A", 
       "G", "D", "B", "E", "F", "A", "G", "B", "E", "F", "A", "D", "B", 
       "C", "E", "F", "A", "D", "B", "C", "E", "F", "A"),
      `MMR Count` = c(2L, 
        1L, 1L, 7L, 2L, 1L, 1L, 3L, 1L, 5L, 1L, 1L, 4L, 1L, 8L, 4L, 1L, 
        4L, 2L, 2L, 2L, 3L, 8L, 1L, 2L, 1L, 7L, 1L, 4L, 9L, 2L, 4L, 10L, 
        2L, 15L, 7L, 4L, 27L, 2L, 14L, 1L, 6L, 9L, 31L, 5L, 14L, 1L, 
        4L, 5L, 21L),
       `Duration Average` = c(37, 20, 9, 8, 2, 5, 1, 1, 
        1, 14, 1, 19, 8, 1, 21, 77, 1, 18, 8, 1, 1, 194, 9, 14, 19, 1, 
        10, 1, 6, 9, 18, 4, 12, 170, 7, 35, 9, 10, 7, 12, 3, 15, 5, 9, 
        10, 10, 18, 11, 16, 14)), .Names = c("Year_Month", "Business", 
        "MMR Count", "Duration Average"), row.names = c(NA, 50L), class = "data.frame")
  </code></pre>
  
  <p>Here is the code that generates the plot:</p>
  
  <pre><code>library(ggplot2)
  ggplot(df1_InSAP_Only,
          aes(x=Year_Month,
              y=`Duration Average`,
              group=Business,
              color=Business,
              size=`MMR Count`)) +
    geom_line(aes(group=Business),stat="identity", size=1, alpha=0.7) +
    geom_point(aes(colour=Business, alpha=0.7)) +
    facet_wrap(~ Business, ncol=2) +
    scale_y_log10( limits=c(-100,1000),breaks=c(0,1,10,100,1000)) +   
    scale_alpha_continuous(range = c(0.5,1), guide='none') + #remove the legend for alpha
    geom_text(data=. %&gt;% dplyr::group_by(Business),
              aes(label=`Duration Average`,vjust=-2),
              size=3,
              position = position_dodge(width=0.9)) +
    geom_text(data=. %&gt;% dplyr::group_by(Business),
              aes(label=`MMR Count`,vjust=3),
              size=3,
              position = position_dodge(width=0.9),
              color="brown")
  </code></pre>
  
  <p>and here is the plot:</p>
  
  <p><a href="https://i.stack.imgur.com/620pN.jpg" rel="nofollow noreferrer"><img src="https://i.stack.imgur.com/620pN.jpg" alt="enter image description here"></a></p>