You don't need to use macro here. Plain function will do the job:
(defn figure [data]
(let [x (range (nrow data))
[h & t] (:column-names data)]
(with-data data
(let [plot (xy-plot x ($ h))]
(doseq [col-name t]
(add-lines plot x ($ col-name)))
(view plot)))))