         (.text #(aget % "text")))))
 
 (defn visualize-insights-bar! [el builds]
-  (let [y-max (apply max (mapcat #((juxt :queued_time_minutes :build_time_minutes) %)
-                                 builds))
-        y-scale (-> (js/d3.scale.linear)
-                    (.domain #js[(- y-max) y-max])
-                    (.range #js[(:height plot-info) 0]))
+  (let [y-pos-max (apply max (map :build_time_minutes
+                                  builds))
+        y-neg-max (apply max (map :queued_time_millis
+                                  builds))
+        y-zero (* (:height plot-info) (:positive-y% plot-info))
         y-pos-scale (-> (js/d3.scale.linear)
-                        (.domain #js[0 y-max])
-                        (.range #js[(y-scale 0) 0]))
+                        (.domain #js[0 y-pos-max])
+                        (.range #js[y-zero 0]))
         y-neg-scale (-> (js/d3.scale.linear)
-                        (.domain #js[0 y-max])
-                        (.range #js[(y-scale 0) (:height plot-info)]))
-        y-middle (y-scale 0)
-        y-tick-values (map js/Math.round
-                           [y-max (* y-max 0.5) 0 (* -1 y-max 0.5) (- y-max)])
-        y-axis (-> (js/d3.svg.axis)
-                   (.scale y-scale)
-                   (.orient "left")
-                   (.tickValues (clj->js y-tick-values))
-                   (.tickFormat js/Math.abs))
+                        (.domain #js[0 y-neg-max])
+                        (.range #js[y-zero (:height plot-info)]))
+        y-pos-tick-values (map js/Math.round
+                               [y-pos-max (* y-pos-max 0.5) 0])
+        y-neg-tick-values (map js/Math.round
+                               [y-neg-max])
+        y-pos-axis (-> (js/d3.svg.axis)
+                       (.scale y-pos-scale)
+                       (.orient "left")
+                       (.tickValues (clj->js y-pos-tick-values)))
+        y-neg-axis (-> (js/d3.svg.axis)
+                       (.scale y-neg-scale)
+                       (.orient "left")
+                       (.tickValues (clj->js y-neg-tick-values)))
         scale-filler (map (partial str "xx-") (range (- (:max-bars plot-info) (count builds))))
         x-scale (-> (js/d3.scale.ordinal)
                     (.domain (clj->js

   :legend-info {:square-size 10
                 :item-width 80
                 :item-height 14   ; assume font is 14px
                 :spacing 4}})

(defn add-queued-time [build]
  (let [queued-time (max (build/queued-time build) 0)]

          (.append "line"))
      (-> axis-container
          (.append "g")
          (.attr "class" "y-axis positive axis"))
      (-> axis-container
          (.append "g")
          (.attr "class" "y-axis negative axis")))))

(defn chartable-builds [builds]
  (->> builds
