                       [(:or :left :top)] -1
                       [(:or :right :bottom)] 1)]
 
-    (into [:g {:class (str "axis " (name orientation))}
-           [:line.rule (apply hash-map (interleave [y1 y2] (:range scale)))]]
-          (map (fn [d]
-                 [:g.tick.major-tick {:transform (translate {x 0 y (scale d)})}
-                  [:text {x (* parity text-margin)} (formatter d)]
-                  [:line {x1 0 x2 (* parity major-tick-width)}]])
-               ticks))))
+    [:g {:class (str "axis " (name orientation))}
+     [:line.rule (apply hash-map (interleave [y1 y2] (:range scale)))]
+
+     (map (fn [d]
+            [:g.tick.major-tick {:transform (translate {x 0 y (scale d)})}
+             [:text {x (* parity text-margin)} (formatter d)]
+             [:line {x1 0 x2 (* parity major-tick-width)}]])
+          ticks)
+
+     (when label
+       [:text.label {:transform (str (translate {x (* parity label-margin)
+                                                 y (mean (:range scale))})
+                                     " "
+                                     (match [orientation]
+                                            [:left] (rotate -90)
+                                            [:right] (rotate 90)
+                                            :else ""))}
+        label])
+     ]))
 
 
 (def ArcMax (- Tau 0.0000001))


(defn translate [coordinates]
  (let [[x y] (->xy coordinates)]
       (str "translate(" x "," y ")")))

(defn scale [coordinates]
  (match [coordinates]

;;Coordinates to any fn can be 2-vector `[x y]` or map `{:x x :y y}`.
^:clj (ns c2.svg
        (:use [c2.maths :only [Pi Tau radians-per-degree
                               sin cos mean]]
              [clojure.core.match :only [match]]))

^:cljs (ns c2.svg
         (:use-macros [clojure.core.match.js :only [match]])
         (:use [c2.maths :only [Pi Tau radians-per-degree
                                sin cos mean]])
         (:require [c2.dom :as dom]))


