** Dependencies Gnuplot (>4)
** Installation
cd ~/quicklisp/local-projects git clone https://github.com/masatoi/clgplot.git
In case of using Roswell, simply
ros install masatoi/clgplot
(ql:quickload :clgplot)
** Usage clgplot generates a data file and a setting file of Gnuplot to tmp directory and execute Gnuplot with -persist option. Paths to these files or command can be changed as below.
(defparameter clgp:gnuplot-path "gnuplot") (defparameter clgp:tmp-dat-file "/tmp/clgplot-tmp.dat") (defparameter clgp:tmp-gp-file "/tmp/clgplot-tmp.gp")
*** Plot of single function
(defparameter x-list (loop for i from (- pi) to pi by 0.1 collect i))
(clgp:plot (mapcar #'sin x-list))
[[./docs/img/clgp01.png]]
Plots can be output to a file as follows.
(clgp:plot (mapcar #'sin x-list) :output "/path/to/file.png") (clgp:plot (mapcar #'sin x-list) :output "/path/to/file.png" :output-format :png) (clgp:plot (mapcar #'sin x-list) :output "/path/to/file.pdf" :output-format :pdf) (clgp:plot (mapcar #'sin x-list) :output "/path/to/file.eps" :output-format :eps)
*** Plot of multiple functions with annotations
(clgp:plots (list (mapcar #'sin x-list) (mapcar #'cos x-list) (mapcar #'tan x-list)) :x-seqs (list x-list x-list x-list) :x-range (list (- pi) pi) :y-range '(-1 1) :title-list '("sin" "cos" "tan") :x-label "x" :y-label "f(x)")
[[./docs/img/clgp02.png]]
(let ((rand-x-list (loop repeat 100 collect (- (random ( 2 pi)) pi))) (rand-y-list (mapcar (lambda (x) (+ (sin x) (random-normal :sd 0.1d0))) rand-x-list))) (clgp:plots (list (mapcar #'sin x-list) rand-y-list) :x-seqs (list x-list rand-x-list) :style '(line point)))
[[./docs/img/clgp02-2.png]]
*** 3D plot examples
(clgp:splot (lambda (x y) (+ (sin x) (cos y))) x-list ; x x-list ; y :view-point '(20 45) :z-scale 1.5)
[[./docs/img/clgp03.png]]
(clgp:splot (lambda (x y) (+ (sin x) (cos y))) x-list ; x x-list ; y :map t)
[[./docs/img/clgp04.png]]
*** Plot matrix (2-dimensional array)
(defparameter mat (make-array '(20 20) :initial-contents (loop for i from (- pi) to (- pi 0.1) by (/ pi 10) collect (loop for j from (- pi) to (- pi 0.1) by (/ pi 10) collect (+ (sin i) (cos j))))))
(clgp:splot-matrix mat)
[[./docs/img/clgp05.png]]
*** Histogram
(defun random-normal (&key (mean 0d0) (sd 1d0)) (let ((alpha (random 1.0d0)) (beta (random 1.0d0))) (+ ( sd (sqrt ( -2 (log alpha))) (sin (* 2 pi beta))) mean)))
(clgp:plot-histogram (loop repeat 3000 collect (random-normal)) ; samples 30 ; number of bin )
[[./docs/img/clgp06.png]]
*** Multiplot
(clgp:multiplot (:layout (2 2) :output "/tmp/multiplot.png" :output-format :png) (clgp:plot (mapcar #'sin x-list) :style 'lines :key nil) (clgp:plot (mapcar #'sin x-list) :style 'points :key nil) (clgp:plot (mapcar #'sin x-list) :style 'impulses :key nil) (clgp:plots (list (mapcar #'sin x-list) (mapcar #'cos x-list) (mapcar #'tan x-list)) :x-seqs (list x-list x-list x-list) :x-range (list (- pi) pi) :y-range '(-1 1) :key nil))
[[./docs/img/multiplot.png]]
** Author Satoshi Imai (satoshi.imai@gmail.com)
** License The MIT license