The first example is my usual “hello world” chart, a histogram of data sampled from a normal distribution.
(use '(incanter core charts stats datasets)) (view (histogram (sample-normal 1000)))
The next example is a scatter plot of the sepal-length vs. sepal-width from the built-in iris data set.
(view (scatter-plot :Sepal.Length :Sepal.Width :data (get-dataset :iris)))
In addition to changing the default theme, I have included new functions for customizing the appearance of the charts. Here’s an example of the set-stroke function, used here to change the color of the data points in the previous chart.
(doto (scatter-plot :Sepal.Length :Sepal.Width :data (get-dataset :iris)) (set-stroke-color java.awt.Color/gray) view)
The next example uses the :group-by option to color the points based on their species.
(view (scatter-plot :Sepal.Length :Sepal.Width :group-by :Species :data (get-dataset :iris)))
This example uses function-plot to create an xy-plot of the sine and cosine functions.
(doto (function-plot sin -10 10) (add-function cos -10 10) view)
This example uses the $rollup and bar-chart functions to plot the data from the built-in hair-eye-color data set.
(with-data (->> (get-dataset :hair-eye-color) ($rollup :sum :count [:hair :eye])) (view (bar-chart :hair :count :group-by :eye :legend true)))
This example uses the box-plot function to plot data from three gamma distributions.
(doto (box-plot (sample-gamma 1000 :shape 1 :rate 2) :legend true :y-label "") view (add-box-plot (sample-gamma 1000 :shape 2 :rate 2)) (add-box-plot (sample-gamma 1000 :shape 3 :rate 2)))
The following examples are based on the charts in figure 4.2 of chapter four of “The Joy of Clojure“, where the performance characteristics of Clojure’s data structures are discussed.
First define the two functions to plot, and the range of values to plot them over.
(defn log32 [x] (/ (log x) (log 32))) (defn f1 [n] (plus (log2 n) (mult (log32 n) 5000))) (defn f2 [n] n) (def min-val 10) (def max-val 40000)
Next, create the plot and use the set-stroke function to increase the stroke thickness for both lines, and make the second line dashed.
(def chart (doto (function-plot f1 min-val max-val :legend true :series-label "O(log2 n) + O(log32 n) * 5000" :x-label "" :y-label "") (add-function f2 min-val max-val :step-size 5000 :series-label "O(n)") (set-stroke :width 2) (set-stroke :width 2 :dataset 1 :dash 5))) (view chart)
The three charts in the book are of the same data but each focuses on a different region. You can use the set-y-range and set-x-range functions to zoom-in on each of the different regions.
;; PLOT (A) (doto chart (set-title "(A)") (set-x-range 100 5000) (set-y-range 30 12000))
;; PLOT (B) (doto chart (set-title "(B)") (set-y-range 10000 16000) (set-x-range 10000 16000))
;; PLOT (C) (doto chart (set-title "(C)") (set-y-range 0 30000) (set-x-range 0 30000))