title: Shading positive and positive areas beyond ZERO line: anomaly in R
body: <p>Given a standardized time series, I will like to shade positive and negative areas in blue and red colors, respectively. Gaining inspiration from the following <a href="https://stackoverflow.com/questions/39986072/r-ggplot2-geom-area-only-one-category-visible">post</a>, I tried the following:</p>
  
  <pre><code>library (ggplot2)
  ggplot(b, aes(dates, dat)) + geom_area(data=subset(b, dat&lt;=0),fill="red",position = 'identity') + geom_area(data=subset(b, dat&gt;=0), fill="blue",position = 'identity')+ 
   geom_smooth(method = "lm",se=F,size=1.2)+geom_line(aes(colour = "red"),size=0.5)+
   scale_x_date(breaks = seq(as.Date("1951-01-01"), as.Date("2013-12-31"), by="10 years"), 
                labels=date_format("%Y"))+theme(axis.text.x  = element_text(angle=0, vjust=0.5, size=10))+
   scale_y_continuous(limits=c(-3,3),breaks = seq(-3,3, by = 1))+ylab(NULL) + xlab("Time (year)")
  </code></pre>
  
  <p><a href="https://i.stack.imgur.com/eZsBo.png" rel="nofollow noreferrer"><img src="https://i.stack.imgur.com/eZsBo.png" alt="enter image description here"></a></p>
  
  <p>The shadded areas do not follow the <code>geom_line</code> correctly. Even at that, the area looks awkward.</p>
  
  <p>How can one fill the area under the geom_lines in a neat way?</p>
  
  <p><strong>Sample data:</strong></p>
  
  <pre><code>    b= structure(list(dates = structure(c(-6940, -6909, -6881, -6850, 
  -6820, -6789, -6759, -6728, -6697, -6667, -6636, -6606, -6575, 
  -6544, -6515, -6484, -6454, -6423, -6393, -6362, -6331, -6301, 
  -6270, -6240, -6209, -6178, -6150, -6119, -6089, -6058, -6028, 
  -5997, -5966, -5936, -5905, -5875, -5844, -5813, -5785, -5754, 
  -5724, -5693, -5663, -5632, -5601, -5571, -5540, -5510, -5479, 
  -5448, -5420, -5389, -5359, -5328, -5298, -5267, -5236, -5206, 
  -5175, -5145, -5114, -5083, -5054, -5023, -4993, -4962, -4932, 
  -4901, -4870, -4840, -4809, -4779, -4748, -4717, -4689, -4658, 
  -4628, -4597, -4567, -4536, -4505, -4475, -4444, -4414, -4383, 
  -4352, -4324, -4293, -4263, -4232, -4202, -4171, -4140, -4110, 
  -4079, -4049, -4018, -3987, -3959, -3928), class = "Date"), dat = c(-0.910625605549408, 
  -0.965393470171649, -1.09716673692565, -1.11364372522414, -0.966928227483839, 
  -0.910113178396864, -0.630295785110983, -0.195304139966426, -0.135086300125106, 
  -0.125590841642733, -0.137958304991406, 0.0292016064073559, 0.076904806101527, 
  0.0978149453048161, 0.155702136185981, 0.487748711269244, 0.819056198490012, 
  0.885907744155614, 0.639001596177642, 0.122744861489825, -0.0535439932455298, 
  0.00848176075044228, -0.0256120780520969, -0.268691565651955, 
  -0.261482420394633, -0.261118385414154, -0.250228992827904, -0.219694376386043, 
  -0.660730544599343, -0.879357276742173, -0.836054538921174, -0.0247531668208166, 
  0.341918262849067, 0.326418683049986, 0.41600402395692, 0.818673624667216, 
  0.956600038145188, 0.868547394585506, 0.962924798622049, 0.507840261383761, 
  0.555739351610198, 0.333775341549737, 0.818872529340592, 1.3044454120894, 
  1.36146482036678, 1.67015073361349, 1.74841533722962, 1.65069696771922, 
  1.57425380503261, 1.57750737078759, 1.60470949976585, 1.76584338785841, 
  1.78747286516521, 2.04291142516622, 1.65691986614514, 0.83435364531951, 
  0.366895222917817, 0.106061443191605, -0.0136257949563308, -0.039172450722867, 
  -0.106395821358355, -0.109865867287957, -0.140110797453417, -0.233859633193537, 
  -0.524821103280969, -0.475822623121396, -0.091938340606421, -0.312738655577179, 
  -0.218992519559913, -0.41729583138858, -0.341109703626088, -0.178764615943057, 
  -0.10437976030027, -0.127138438602851, -0.329999135840519, -0.441987514925649, 
  -0.347126807394235, -0.685007291681231, -1.31251477363399, -1.16026862098407, 
  -0.857848717241228, -0.719142935845841, -0.843613199408936, -0.88500351882596, 
  -0.916860816746853, -0.831325622290225, -0.851113829318015, -0.982876516574583, 
  -0.821655087299125, -0.725824711405517, -0.605505392406424, -0.419847379860051, 
  -0.614459124334038, -0.323828057338646, -0.257470581680261, -0.243811093634083, 
  -0.210160321834246, -0.17882228119167, 0.100567046322816, 0.333897813715549
  )), .Names = c("dates", "dat"), row.names = c(NA, 100L), class = "data.frame")
  </code></pre>
  
  <p>This is the same figure plotted within MATLAB and can be found <a href="https://www.mathworks.com/matlabcentral/fileexchange/61345-eof?focused=7210790&amp;tab=example&amp;requestedDomain=true" rel="nofollow noreferrer">here</a>. Solutions outside ggplot2 are also welcome.</p>
  
  <p>The same figure plotted in <code>MATLAB</code> with <a href="https://www.mathworks.com/matlabcentral/fileexchange/61327-anomaly?focused=7203922&amp;tab=example" rel="nofollow noreferrer">anomaly function</a></p>
  
  <p><a href="https://i.stack.imgur.com/3wziy.jpg" rel="nofollow noreferrer"><img src="https://i.stack.imgur.com/3wziy.jpg" alt="enter image description here"></a></p>