                 (shape (project [ax ay]) (project [ax base-y]) i))))))
          (apply svg/group attribs))))
 
+;; Heatmap
+;;
+;; | *Key*            | *Required* | *Default*    | *Description*                                      |
+;; |------------------+------------+--------------+----------------------------------------------------|
+;; | `:matrix`        | Y          | nil          | NDArray instance of data grid                      |
+;; | `:palette`       | Y          | nil          | Color list                                         |
+;; | `:palette-scale` | N          | linear-scale | Mapping function of matrix values to palette index |
+;; | `:value-domain`  | N          | [0 1]        | Domain interval of matrix values                   |
+;; | `:clamp`         | N          | false        | If true, matrix values are clamped to value domain |
+;;
+;; *Note:* If `:clamp` is not enabled, the `:value-domain` acts as
+;; filter and will not include cells with values outside the domain,
+;; resulting in holes in the visualization. On the other hand, if
+;; `:clamp` is enabled, the `:value-domain` acts as a kind of
+;; amplification or compression function.
+
 (defn svg-heatmap
   [{:keys [x-axis y-axis project]}
    {:keys [matrix value-domain clamp palette palette-scale attribs shape]

       :major (log-tick-marks-major base domain)
       :minor (log-tick-marks-minor base domain))
      (axis-common*)))

(defn lens-axis
  [{:keys [domain range focus strength major minor]

                       label-style)
         :label-dist  (or label-dist (+ 10 major-size))))

;; Linear

(defn lin-tick-marks
  [[d1 d2] delta]
  (let [dr (- d2 d1)
