title: Nudging geom_segments where x|xend = -Inf and segments are color-coded by group
body: <p>I have data for 16 analytes (the facet variable) for three groundwater monitoring wells (well = factor basis for color-coding), each screened at different intervals. For each analyte (facet), the intent is to overlay the data for each well and show corresponding screen intervals along the y-axis. Some screens overlap so aren't easily distinguished. The goal is to have them align along the y-axis with equidistant spacing in this fashion: |||. Problem is the levels of my facetting variable have very different scales. Below is a rough example using the diamonds data set.</p>
  
  <pre><code>require(dplyr)
  require(ggplot2)
  
  # Create mock dataframe, where facet variable ("mockvar") has different x-axis scales
  mockdf &lt;- filter(diamonds, cut=="Fair"|cut=="Good"|cut=="Ideal") %&gt;% 
  droplevels() %&gt;% mutate(mockvar=ifelse(clarity=="SI2", 10*table,
                ifelse(clarity=="SI1", 100*table, 
                ifelse(clarity=="VS2", 1000*table, table))))
  
  #Plot Code
  ggplot(mockdf, aes(mockvar, depth, color=cut)) + scale_y_reverse() +
  geom_point() + facet_wrap(~clarity, scales="free") +
  geom_segment(data=mockdf[mockdf$cut=="Fair",], aes(x=-Inf, xend=-Inf, y=55, yend=65)) +
  geom_segment(data=mockdf[mockdf$cut=="Good",], aes(x=-Inf, xend=-Inf, y=60, yend=70)) + 
  geom_segment(data=mockdf[mockdf$cut=="Ideal",], aes(x=-Inf, xend=-Inf, y=65, yend=75)) 
  
  #calls to position = position_dodge(width = #.#)) ...didn't work 
  </code></pre>
  
  <p><a href="https://i.stack.imgur.com/I2cCI.png" rel="nofollow noreferrer"><img src="https://i.stack.imgur.com/I2cCI.png" alt="enter image description here"></a></p>
  
  <p>How do I juggle the segments given the different scaling? An alternate long-winded solution would be to subset further on each facet level, for example:</p>
  
  <pre><code>ggplot(mockdf, aes(mockvar, depth, color=cut)) + scale_y_reverse() +
  geom_point() + facet_wrap(~clarity, scales="free") +
  geom_segment(data=mockdf[mockdf$cut=="Fair"&amp; mockdf$clarity=="I1",], aes(x=49, xend=49, y=55, yend=65)) + 
  geom_segment(data=mockdf[mockdf$cut=="Good"&amp; mockdf$clarity=="I1",], aes(x=49.5, xend=49.5, y=60, yend=70)) + 
  geom_segment(data=mockdf[mockdf$cut=="Ideal"&amp; mockdf$clarity=="I1",], aes(x=50, xend=50, y=65, yend=75)) 
  #and so on for all remaining facet levels....
  </code></pre>
  
  <p>But that's a lot of code and a crude 'jerry-rig' at best. Any suggestions for keeping the initial x|xend=-Inf for the first group, then nudging the next 2 segments relative to -Inf with consistent spacing globally across facets?</p>