eazy-gnuplot 'gnuplot Cookbook' Companion¶

This document is a companion for eazy-gnuplot users going through the 'excellent book by Lee Philips 'gnuplot Cookbook' from Packt Publishing. I highly recommend buying this book.

In this companion we demonstrate implementing the plots in the book using eazy-gnuplot. Liberties have been taken plots may not follow exactly what is shown in the book (when they don't they follow the spirit).

This document is an iPython notebook from common-lisp-jupyter. Clone eazy-gnuplot or download this notebook at https://github.com/guicho271828/eazy-gnuplot/blob/master/docs/eazy-gnuplot-cookbook-companion.ipynb. Go to the downloaded directory and execute 'jupyter notebook' from a shell.

Edit: Updated the notebook for newer eazy-gnuplot and common-lisp-jupyter (a successor of cl-jupyter that is better maintained). I strongly recommend installation via Roswell (without it, installation is kind of manual). (Masataro Asai)

In [1]:
;png-from-file is used to display png files in cl-jupyter if not using cl-jupyter create a dummy function
(defun png-from-file (f) (jupyter:file f :display t))
Out[1]:
PNG-FROM-FILE
In [2]:
;We need a directory called images to store our plots make sure it exists
(ensure-directories-exist "images/")
Out[2]:
"images/"
Out[2]:
NIL
In [3]:
(quicklisp-client:quickload '(:eazy-gnuplot :clml.statistics :clml.utility))
(use-package :eazy-gnuplot)
To load "eazy-gnuplot":
  Load 1 ASDF system:
    eazy-gnuplot
; Loading "eazy-gnuplot"
[package lisp-namespace-asd]
To load "clml.statistics":
  Load 1 ASDF system:
    clml.statistics
; Loading "clml.statistics"
[package clml.statistics.rand-environment]
To load "clml.utility":
  Load 1 ASDF system:
    clml.utility
; Loading "clml.utility"
[package drakma-asd]..............................
[package flexi-streams-system]....................
[package chipz-system]...
Out[3]:
(:EAZY-GNUPLOT :CLML.STATISTICS :CLML.UTILITY)
Out[3]:
T

1 Plotting Curves Boxes Points and More¶

In [4]:
(defun function-plot (output)
  (with-plots (s :debug nil)
    (gp-setup :terminal '(pngcairo) :output output)
    (plot "(sin(1/x) - cos(x))*erfc(x)"))
  output)
(png-from-file (function-plot "images/function-plot.png"))
Out[4]:
FUNCTION-PLOT
SB-INT:SIMPLE-STYLE-WARNING: The variable S is defined but never used.
In [5]:
(defun seperate-y-axis-plot (output)
  (with-plots (s :debug nil)
    (gp-setup :terminal '(pngcairo) :output output :y2tics '(-100 10) :ytics
              :nomirror)
    (plot "sin(1/x) axis x1y1,100*cos(x) axis x1y2"))
  output)
(png-from-file (seperate-y-axis-plot "images/seperate-y-axis-plot.png"))
Out[5]:
SEPERATE-Y-AXIS-PLOT
SB-INT:SIMPLE-STYLE-WARNING: The variable S is defined but never used.
In [6]:
(defun seperate-y-axis2-plot (output)
  (with-plots (s :debug nil)
    (gp-setup :terminal '(pngcairo) :output output :x2tics '(-20 2) :xtics
              :nomirror :xrange '(-10 10) :x2range '(-20 10) :samples
              100)
    (plot "sin(1/x) axis x1y1")
    (plot "100*cos(x-1) axis x2y2"))
  output)
(png-from-file (seperate-y-axis2-plot "images/seperate-y-axis2-plot.png"))
Out[6]:
SEPERATE-Y-AXIS2-PLOT
SB-INT:SIMPLE-STYLE-WARNING: The variable S is defined but never used.
In [7]:
(defun scatter-plot (output)
  (with-plots (s :debug nil)
    (gp-setup :terminal '(pngcairo) :output output)
    (plot
     (lambda ()
       (loop for p in (map 'list (lambda (x y) (list x y))
                           (clml.statistics:rand-n
                            (clml.statistics:chi-square-distribution 100) 300)
                           (clml.statistics:rand-n
                            (clml.statistics:chi-square-distribution 10) 300))
             do (format s "~&~{~a~^ ~}" p)))
     :with '(:points :pt 7)))
  output)
(png-from-file (scatter-plot "images/scatter-plot.png"))
Out[7]:
SCATTER-PLOT
In [8]:
(defun plotting-boxes-plot (output)
  (with-plots (s :debug nil)
    (gp-setup :terminal '(pngcairo) :output output :style '(:fill :pattern))
    (plot "[-6:6] besj0(x) with boxes, sin(x) with boxes"))
  output)
(png-from-file (plotting-boxes-plot "images/plotting-boxes-plot.png"))
Out[8]:
PLOTTING-BOXES-PLOT
SB-INT:SIMPLE-STYLE-WARNING: The variable S is defined but never used.
In [9]:
(defun plotting-boxes-solid-plot (output)
  (with-plots (s :debug nil)
    (gp-setup :terminal '(pngcairo) :output output :style '(:fill :solid))
    (plot "[-6:6] besj0(x) with boxes, sin(x) with boxes"))
  output)
(png-from-file
 (plotting-boxes-solid-plot "images/plotting-boxes-solid-plot.png"))
Out[9]:
PLOTTING-BOXES-SOLID-PLOT
SB-INT:SIMPLE-STYLE-WARNING: The variable S is defined but never used.
In [10]:
(defun plotting-circles-plot (output)
  (with-plots (s :debug nil)
    (gp-setup :terminal '(pngcairo) :output output)
    (plot
     (lambda ()
       (loop for p in (map 'list (lambda (x y z) 
                                         (declare (ignorable z))
                                         (list x y))
                            (clml.statistics:rand-n
                              (clml.statistics:chi-square-distribution 100) 300)
                            (clml.statistics:rand-n
                              (clml.statistics:chi-square-distribution 10) 300)
                            (clml.statistics:rand-n
                              (clml.statistics:chi-square-distribution 1) 300))
             do (format s "~&~{~a~^ ~}" p)))
     :with '(:circles)))
  output)
(png-from-file (plotting-circles-plot "images/plotting-circles-plot.png"))
Out[10]:
PLOTTING-CIRCLES-PLOT
In [11]:
(defun drawing-filled-curves-plot (output)
  (with-plots (s :debug nil)
    (gp-setup :terminal '(pngcairo) :output output :isosamples 1000)
    (plot
     (lambda ()
       (loop for i from 0 upto 50
             do (format s "~&~a ~a" i (sin i))))
     :with '(:filledcurves :above :y1 = 0.07))
    (plot
     (lambda ()
       (loop for i from 0 upto 50
             do (format s "~&~a ~a" i (sin i))))
     :with '(:lines)))
  output)
(png-from-file
 (drawing-filled-curves-plot "images/drawing-filled-curves-plot.png"))
Out[11]:
DRAWING-FILLED-CURVES-PLOT
In [12]:
(defun drawing-blue-filled-curves (output)
  (with-plots (s :debug nil)
    (gp-setup :terminal '(pngcairo) :output output :style '(fill pattern 5))
    (plot
     (lambda ()
       (loop for i from 0 upto 50
             do (format s "~&~a ~a" i (sin i))))
     :lt '(rgb "blue") :with '(:filledcurves :above :y1 = 0.07))
      (plot
     (lambda ()
       (loop for i from 0 upto 50
             do (format s "~&~a ~a" i (sin i))))
     :lt '(rgb "blue") :with '(:lines)))
  output)
(png-from-file
 (drawing-blue-filled-curves "images/drawing-blue-filled-curves.png"))
Out[12]:
DRAWING-BLUE-FILLED-CURVES

This exercise requires Gnuplot 5

In [13]:
(defun filled-curves-plot (output)
  (with-plots (s :debug nil)
    (gp-setup :terminal '(:pngcairo) :output output :style
              '(fill pattern 5))
    (plot
     (lambda ()
       (loop for i from 0 upto 1 by 0.1
             do (format s "~&~a ~a ~a" i i (sin i))))
     :using '(1 2 3) :lw 3 :notitle ())
    (plot
     (lambda ()
       (loop for i from 0 upto 1 by 0.1
             do (format s "~&~a ~a ~a" i i (sin i))))
     :using '(1 2) :lw 3 :notitle ())
    (plot
     (lambda ()
       (loop for i from 0 upto 1 by 0.1
             do (format s "~&~a ~a ~a" i i (sin i))))
     :using '(1 3) :lw 3 :notitle () :with '(:filledcurves :above :y1 = 0.07)))
  output)
(png-from-file (filled-curves-plot "images/filled-curves-plot.png"))
Out[13]:
FILLED-CURVES-PLOT
In [14]:
;; does not work now; this google service is 404.
(defun finance-bars-plot (output)
  (let ((s
         (clml.utility.data:fetch
          "http://www.google.com/finance/getprices?i=60&p=10d&f=d,o,h,l,c,v&df=cpct&q=ibm"
          :stream t)))
    (clml.utility.data:process-finance-header s)
    (with-plots (s :debug nil)
      (gp-setup :terminal '(pngcairo) :output output :bars 2)
      (plot
       (lambda ()
         (loop for row across (subseq
                               (clml.utility.csv:read-csv-stream s :type-spec
                                                                 '(float float
                                                                         float
                                                                         float
                                                                         float
                                                                         float))
                               0 100)
               do (format s "~&~{~a~^ ~}" (coerce row 'list))))
       :using '(0 2 3 4 5) :with 'financebars)))
  output)
;; (png-from-file (finance-bars-plot "images/finance-bars-plot.png"))
Out[14]:
FINANCE-BARS-PLOT
In [15]:
(defun histogram-like-plot (output)
  (with-plots (s :debug nil)
    (gp-setup :terminal '(pngcairo) :output output)
    (plot
     (lambda ()
       (loop for i from -2 upto 2 by 0.1
             do (format s "~&~a ~a" i (- (* i i)))))
     :with '(:histeps)))
  output)
(png-from-file (histogram-like-plot "images/histogram-like-plot.png"))
Out[15]:
HISTOGRAM-LIKE-PLOT
In [16]:
(defun histogram-stacked-plot (output)
  (with-plots (s :debug nil)
    (gp-setup :terminal '(pngcairo) :output output :style
              '(fill solid 1.0 border lt -1) :style '(data histograms) :style
              '(histogram rowstacked))
    (plot
     (lambda ()
       (loop for i from -2 upto 2 by 0.1
             do (format s "~&~a ~a ~a ~a" i (- (* i i)) (* i i) i)))
     :using (list "(-$2)") :using (list "(20*$2)") :notitle nil))
  output)
(png-from-file (histogram-stacked-plot "images/histogram-stacked-plot.png"))
Out[16]:
HISTOGRAM-STACKED-PLOT
In [17]:
(defun multiple-histograms-plot (output)
  (with-plots (s :debug nil)
    (gp-setup :output output :terminal '(:pngcairo) :title
              "multiple histograms" :key '(invert reverse left outside) :key
              '(autotitle columnheader) :style '(data histogram) :style
              '(histogram rowstacked) :style '(fill solid border -1))
    (flet ((data ()
           (loop for r in '((8.01 1 5 1) (8.02 3 5 1) (8.03 4 4 1) (8.04 3 4 1)
                            (8.05 1 2 1))
                 do (format s "~&~{~^~a ~}" r))))
        (plot #'data :using 2 :title "col0")
        (plot #'data :using 2 :title "col1")
        (plot #'data :using 3 :title "col2")
        (plot #'data :using 4 :title "col3")))
  output)
(png-from-file
 (multiple-histograms-plot "images/multiple-histograms-plot.png"))
Out[17]:
MULTIPLE-HISTOGRAMS-PLOT
In [18]:
(defun error-bars-plot (output)
  (with-plots (s :debug nil)
    (gp-setup :output output :terminal '(:pngcairo) :title "error bars" :bars 3
              :pointsize 3 :xrange '(8.0 8.06))
    (flet ((data ()
           (loop for r in '((8.01 1 0.2) (8.02 3 0.3) (8.03 4 0.4) (8.04 3 0.4) (8.05 1 0.1))
                 do (format s "~&~{~^~a ~}" r))))
        (plot #'data :using '(1 |(-$2)| 3) :title "error" :with :errorbars)
        (plot #'data :using '(1 |(-$2)| 3) :title "col0" :pt 7)))
  output)
(png-from-file (error-bars-plot "images/error-bars-plot.png"))
Out[18]:
ERROR-BARS-PLOT
In [19]:
(defun boxerror-bars-plot (output)
  (with-plots (s :debug nil)
    (gp-setup :output output :terminal '(:pngcairo) :title "error bars" :style
              '(fill pattern 2 border) :xrange '(8.0 8.06))
    (plot
     (lambda ()
       (loop for r in '((8.01 1 0.2) (8.02 3 0.3) (8.03 4 0.4) (8.04 3 0.4)
                        (8.05 1 0.1))
             do (format s "~&~{~^~a ~}" r)))
     :using '(1 |($2)| 3) :with :boxerrorbars :title "boxers"))
  output)
(png-from-file (boxerror-bars-plot "images/boxerror-bars-plot.png"))
Out[19]:
BOXERROR-BARS-PLOT
In [20]:
(defun candlestick-plot (output)
  (with-plots (s :debug nil)
    (gp-setup :output output :terminal '(:pngcairo) :title "candlestick"
              :xrange '(0 5) :yrange '(0 25) :boxwidth '(0.2 absolute))
    (flet ((data ()
             (loop for r in '((1 5 7 10 15 24 0.3 "quick")
                              (2 6 8 11 16 23 0.4 "fox")
                              (3 5 7 11 17 22 0.5 "lazy")
                              (4 6 9 10 18 21 0.3 "dog"))
                 do (format s "~&~{~^~a ~}" r))))
        (plot #'data :using '(1 3 2 6 5 |xticlabels(8)|) :with :candlesticks :title "quartiles")
        (plot #'data :using '(1 4 4 4 4) :with :candlesticks :lt -1 :notitle ())))
  output)
(png-from-file (candlestick-plot "images/candlestick-plot.png"))
Out[20]:
CANDLESTICK-PLOT
In [21]:
(defun impluse-plot (output)
  (with-plots (s :debug nil)
    (gp-setup :output output :terminal '(:pngcairo) :title "candlestick"
              :xrange '(0 5))
    (plot
     (lambda ()
       (loop for r in '((1 5 7 10 15 24 0.3 "quick")
                        (2 6 8 11 16 23 0.4 "fox")
                        (3 5 7 11 17 22 0.5 "lazy")
                        (4 6 9 10 18 21 0.3 "dog"))
             do (format s "~&~{~^~a ~}" r)))
     :using '(1 6 |xticlabels(8)|) :with :impulses :notitle ()))
  output)
(png-from-file (impluse-plot "images/impluse-plot.png"))
Out[21]:
IMPLUSE-PLOT
In [22]:
(defun stem-plot (output)
  (with-plots (s :debug nil)
    (gp-setup :output output :terminal '(:pngcairo) :title "candlestick"
              :xrange '(0 5) :yrange '(0 25))
    (flet ((data ()
             (loop for r in '((1 5 7 10 15 24 0.3 "quick")
                              (2 6 8 11 16 23 0.4 "fox")
                              (3 5 7 11 17 22 0.5 "lazy")
                              (4 6 9 10 18 21 0.3 "dog"))
                 do (format s "~&~{~^~a ~}" r))))
    (plot #'data
     :using '(1 6 |xticlabels(8)|) :with :impulses :lw 4 :title "counts")
    (plot #'data
     :using '(1 6) :with :points :pt 9 :notitle ())))
  output)
(png-from-file (stem-plot "images/stem-plot.png"))
Out[22]:
STEM-PLOT
In [23]:
(defun parametric-plot (output)
  (with-plots (s :debug nil)
    (gp-setup :output output :terminal '(:pngcairo) :title "parametric"
              :samples 1000 :parametric 'nil :trange '(-7 20))
    (plot "sin(7*t), sin(111*t)" :notitle 'nil))
  output)
(png-from-file (parametric-plot "images/parametric-plot.png"))
Out[23]:
PARAMETRIC-PLOT
SB-INT:SIMPLE-STYLE-WARNING: The variable S is defined but never used.
In [24]:
(defun parametric2-plot (output)
  (with-plots (s :debug nil)
    (gp-setup :output output :terminal '(:pngcairo) :title "parametric"
              :samples 1000 :parametric 'nil :trange '(-7 20))
    (plot "sin(7*t), sin(111*t)" :notitle 'nil))
  output)
(png-from-file (parametric2-plot "images/parametric2-plot.png"))
Out[24]:
PARAMETRIC2-PLOT
SB-INT:SIMPLE-STYLE-WARNING: The variable S is defined but never used.
In [25]:
(defun polar-plot (output)
  (with-plots (s :debug nil)
    (gp-setup :output output :terminal '(:pngcairo) :title "polar" :xtics
              :axis :xtics :nomirror :ytics :axis :ytics :nomirror :zeroaxis () :samples
              500 :polar () :trange '(0 |12*pi|))
    (gp :unset :border)
    (gp :unset :raxis)
    (plot "cos(7*t), sin(111*t)"))
  output)
(png-from-file (polar-plot "images/polar-plot.png"))
Out[25]:
POLAR-PLOT
SB-INT:SIMPLE-STYLE-WARNING: The variable S is defined but never used.

2 Annotating With Labels and Legends¶

In [26]:
(defun labeling-the-axis-plot (output)
  (with-plots (s :debug nil)
    (gp-setup :output output :terminal '(:pngcairo) :title
              "axis labels and lagends" :parametric 'nil :xlabel "time (sec.)"
              :ylabel "amplitude" :y2label "error magnitude")
    (flet ((data ()
            (loop for x from -5 upto 5 by 0.1
                  do (format s "~&~a ~a ~a" x (sin x) (log x)))))
      (plot #'data :using '(1 2 |(sgn($2))|) :with :filledcurves :notitle ())
      (plot #'data :using '(1 2) :with :lines :title "square")
      (plot #'data :using '(1 |(sgn($2))|) :with :lines :title "fourier")
      (plot #'data :using '(1 |(abs(sgn($2)-$2))|) :with :lines :axis :x1y2 :title "error")))
  output)
(png-from-file (labeling-the-axis-plot "images/labeling-the-axis-plot.png"))
Out[26]:
LABELING-THE-AXIS-PLOT

This plot generates a postscript file¶

If you have a postscript viewer like ghostscript you open the file at the path given by the output of `setting-label-size-plot. Other wise we have included a conversion of it to a png below

In [27]:
(defun setting-label-size-plot (output)
  (with-plots (s :debug nil)
    (gp-setup :terminal '(postscript landscape "courier, 18") :output output
              :title "axis labels and lagends" :parametric 'nil :xlabel
              "time (sec.)" :ylabel "amplitude" :y2label "error magnitude")
    (flet ((data ()
            (loop for x from -5 upto 5 by 0.1
                  do (format s "~&~a ~a ~a" x (sin x) (log x)))))
      (plot #'data :using '(1 2 |(sgn($2))|) :with :filledcurves :notitle ())
      (plot #'data :using '(1 2) :with :lines :title "square")
      (plot #'data :using '(1 |(sgn($2))|) :with :lines :title "fourier")
      (plot #'data :using '(1 |(abs(sgn($2)-$2))|) :with :lines :axis :x1y2 :title "error")))
  output)
(png-from-file (setting-label-size-plot "images/setting-label-size-plot.ps"))
Out[27]:
SETTING-LABEL-SIZE-PLOT
images/setting-label-size-plot.ps

In [28]:
(defun adding-a-legend-plot (output)
  (with-plots (s :debug nil)
    (gp-setup :output output :terminal '(:pngcairo) :title
              "axis labels and lagends" :parametric 'nil :xlabel "time (sec.)"
              :ylabel "amplitude" :y2label "error magnitude")
    (flet ((data ()
            (loop for x from -5 upto 5 by 0.1
                  do (format s "~&~a ~a ~a" x (sin x) (log x)))))
      (plot #'data :using '(1 2 |(sgn($2))|) :with :filledcurves :notitle ())
      (plot #'data :using '(1 2) :with :lines :title "square")
      (plot #'data :using '(1 |(sgn($2))|) :with :lines :title "fourier")
      (plot #'data :using '(1 |(abs(sgn($2)-$2))|) :with :lines :axis :x1y2 :title "error")))
  output)
(png-from-file (adding-a-legend-plot "images/adding-a-legend-plot.png"))
Out[28]:
ADDING-A-LEGEND-PLOT
In [29]:
(defun putting-a-box-around-a-legend-plot (output)
  (with-plots (s :debug nil)
    (gp-setup :output output :terminal '(:pngcairo) :title
              "axis labels and lagends" :parametric 'nil :xlabel "time (sec.)"
              :ylabel "amplitude" :y2label "error magnitude" :key
              '(box lt -1 lw 2 opaque))
    (flet ((data ()
            (loop for x from -5 upto 5 by 0.1
                  do (format s "~&~a ~a ~a" x (sin x) (log x)))))
      (plot #'data :using '(1 2 |(sgn($2))|) :with :filledcurves :notitle ())
      (plot #'data :using '(1 2) :with :lines :title "square")
      (plot #'data :using '(1 |(sgn($2))|) :with :lines :title "fourier")
      (plot #'data :using '(1 |(abs(sgn($2)-$2))|) :with :lines :axis :x1y2 :title "error")))
  output)
(png-from-file
 (putting-a-box-around-a-legend-plot
  "images/putting-a-box-around-a-legend-plot.png"))
Out[29]:
PUTTING-A-BOX-AROUND-A-LEGEND-PLOT
In [30]:
(defun adding-a-label-with-arrow-plot (output)
  (with-plots (s :debug t)
    (gp-setup :output output :terminal '(:pngcairo) :title
              "axis labels and lagends" :parametric 'nil :xlabel "time (sec.)"
              :ylabel "amplitude" :y2label "error magnitude")
    (gp :set :label "approximation error" :right :at '(-0.5 0.9) :offset '(-0.5 0) :front)
    (gp :set :arrow :from :first '|-0.5 , 0.9| :to '|0 , 1| :lt 1 :lw 2 :front :size '(0.3 15))
    (flet ((data ()
            (loop for x from -5 upto 5 by 0.1
                  do (format s "~&~a ~a ~a" x (sin x) (log x)))))
      (plot #'data :using '(1 2 |(sgn($2))|) :with :filledcurves :notitle ())
      (plot #'data :using '(1 2) :with :lines :title "square")
      (plot #'data :using '(1 |(sgn($2))|) :with :lines :title "fourier")
      (plot #'data :using '(1 |(abs(sgn($2)-$2))|) :with :lines :axis :x1y2 :title "error")))
  output)
(png-from-file
 (adding-a-label-with-arrow-plot "images/adding-a-label-with-arrow-plot.png"))
Out[30]:
ADDING-A-LABEL-WITH-ARROW-PLOT
" set terminal pngcairo 
 set output \"images/adding-a-label-with-arrow-plot.png\" 
 set title \"axis labels and lagends\" 
 set parametric  
 set xlabel \"time (sec.)\" 
 set ylabel \"amplitude\" 
 set y2label \"error magnitude\" 
 set label \"approximation error\" right at -0.5,0.9 offset -0.5,0 front 
 set arrow from first -0.5 , 0.9 to 0 , 1 lt 1 lw 2 front size 0.3,15 
plot '-' using 1:2:(sgn($2)) with filledcurves notitle , '-' using 1:2 with lines title \"square\", '-' using 1:(sgn($2)) with lines title \"fourier\", '-' using 1:(abs(sgn($2)-$2)) with lines axis x1y2 title \"error\"
-5 0.9589243 #C(1.609438 3.1415927)
-4.9 0.9824526 #C(1.5892352 3.1415927)
-4.8 0.9961646 #C(1.5686159 3.1415927)
-4.7000003 0.9999233 #C(1.5475626 3.1415927)
-4.6000004 0.993691 #C(1.5260564 3.1415927)
-4.5000005 0.97753024 #C(1.5040776 3.1415927)
-4.4000006 0.9516022 #C(1.4816047 3.1415927)
-4.3000007 0.9161662 #C(1.4586152 3.1415927)
-4.200001 0.87157613 #C(1.4350847 3.1415927)
-4.100001 0.8182776 #C(1.4109871 3.1415927)
-4.000001 0.7568031 #C(1.3862946 3.1415927)
-3.900001 0.6877669 #C(1.3609768 3.1415927)
-3.8000011 0.6118588 #C(1.3350013 3.1415927)
-3.7000012 0.5298372 #C(1.3083332 3.1415927)
-3.6000013 0.44252163 #C(1.2809342 3.1415927)
-3.5000014 0.35078457 #C(1.2527634 3.1415927)
-3.4000015 0.25554258 #C(1.2237759 3.1415927)
-3.3000016 0.1577473 #C(1.193923 3.1415927)
-3.2000017 0.058375858 #C(1.1631514 3.1415927)
-3.1000018 -0.04157885 #C(1.1314027 3.1415927)
-3.000002 -0.14111812 #C(1.0986129 3.1415927)
-2.900002 -0.23924738 #C(1.0647115 3.1415927)
-2.800002 -0.33498618 #C(1.0296202 3.1415927)
-2.7000022 -0.4273779 #C(0.9932526 3.1415927)
-2.6000023 -0.5154994 #C(0.95551234 3.1415927)
-2.5000024 -0.5984702 #C(0.9162917 3.1415927)
-2.4000025 -0.67546135 #C(0.87546974 3.1415927)
-2.3000026 -0.7457035 #C(0.83291024 3.1415927)
-2.2000027 -0.8084948 #C(0.7884586 3.1415927)
-2.1000028 -0.863208 #C(0.74193865 3.1415927)
-2.0000029 -0.9092962 #C(0.6931486 3.1415927)
-1.9000028 -0.9462992 #C(0.64185536 3.1415927)
-1.8000028 -0.973847 #C(0.5877882 3.1415927)
-1.7000028 -0.99166447 #C(0.5306299 3.1415927)
-1.6000028 -0.9995735 #C(0.47000536 3.1415927)
-1.5000027 -0.9974952 #C(0.40546694 3.1415927)
-1.4000027 -0.9854502 #C(0.33647418 3.1415927)
-1.3000027 -0.9635589 #C(0.26236632 3.1415927)
-1.2000027 -0.93204004 #C(0.18232378 3.1415927)
-1.1000026 -0.8912086 #C(0.09531259 3.1415927)
-1.0000026 -0.8414724 #C(2.622601e-6 3.1415927)
-0.9000026 -0.78332853 #C(-0.105357625 3.1415927)
-0.8000026 -0.7173579 #C(-0.22314033 3.1415927)
-0.70000255 -0.64421964 #C(-0.3566713 3.1415927)
-0.6000025 -0.5646446 #C(-0.5108214 3.1415927)
-0.5000025 -0.47942773 #C(-0.6931422 3.1415927)
-0.4000025 -0.38942066 #C(-0.91628444 3.1415927)
-0.30000252 -0.2955226 #C(-1.2039645 3.1415927)
-0.20000252 -0.1986718 #C(-1.6094253 3.1415927)
-0.10000252 -0.099835925 #C(-2.3025599 3.1415927)
-2.5182962e-6 -2.5182962e-6 #C(-12.891928 3.1415927)
0.09999748 0.09983091 -2.3026102
0.19999748 0.19866687 -1.6094505
0.29999748 0.2955178 -1.2039812
0.39999747 0.389416 -0.9162971
0.49999747 0.4794233 -0.69315225
0.59999746 0.5646404 -0.51082987
0.6999975 0.64421576 -0.35667855
0.7999975 0.71735436 -0.22314666
0.89999753 0.7833254 -0.10536326
0.99999756 0.84146965 -2.4437934e-6
1.0999975 0.89120626 0.095307924
1.1999975 0.9320382 0.1823195
1.2999976 0.96355754 0.2623624
1.3999976 0.9854493 0.3364705
1.4999976 0.9974948 0.40546352
1.5999976 0.99957365 0.47000214
1.6999977 0.9916651 0.5306269
1.7999977 0.97384816 0.58778536
1.8999977 0.9463008 0.6418527
1.9999977 0.90929836 0.69314605
2.0999978 0.8632105 0.74193627
2.1999977 0.8084978 0.7884563
2.2999976 0.74570686 0.8329081
2.3999975 0.67546505 0.87546766
2.4999974 0.59847426 0.9162897
2.5999973 0.5155037 0.9555104
2.6999972 0.4273824 0.9932507
2.799997 0.3349909 1.0296184
2.899997 0.23925224 1.0647097
2.999997 0.14112307 1.0986112
3.0999968 0.041583855 1.1314011
3.1999967 -0.05837086 1.1631498
3.2999966 -0.15774235 1.1939214
3.3999965 -0.25553775 1.2237744
3.4999964 -0.3507799 1.252762
3.5999963 -0.44251716 1.2809328
3.6999962 -0.52983296 1.3083318
3.7999961 -0.61185485 1.335
3.899996 -0.6877633 1.3609755
3.999996 -0.7567998 1.3862933
4.099996 -0.81827486 1.4109861
4.199996 -0.8715738 1.4350836
4.299996 -0.9161643 1.4586141
4.399996 -0.9516008 1.4816036
4.4999957 -0.9775292 1.5040765
4.5999956 -0.9936905 1.5260553
4.6999955 -0.9999232 1.5475615
4.7999954 -0.99616504 1.568615
4.8999953 -0.98245347 1.5892342
4.999995 -0.9589256 1.609437
end

-5 0.9589243 #C(1.609438 3.1415927)
-4.9 0.9824526 #C(1.5892352 3.1415927)
-4.8 0.9961646 #C(1.5686159 3.1415927)
-4.7000003 0.9999233 #C(1.5475626 3.1415927)
-4.6000004 0.993691 #C(1.5260564 3.1415927)
-4.5000005 0.97753024 #C(1.5040776 3.1415927)
-4.4000006 0.9516022 #C(1.4816047 3.1415927)
-4.3000007 0.9161662 #C(1.4586152 3.1415927)
-4.200001 0.87157613 #C(1.4350847 3.1415927)
-4.100001 0.8182776 #C(1.4109871 3.1415927)
-4.000001 0.7568031 #C(1.3862946 3.1415927)
-3.900001 0.6877669 #C(1.3609768 3.1415927)
-3.8000011 0.6118588 #C(1.3350013 3.1415927)
-3.7000012 0.5298372 #C(1.3083332 3.1415927)
-3.6000013 0.44252163 #C(1.2809342 3.1415927)
-3.5000014 0.35078457 #C(1.2527634 3.1415927)
-3.4000015 0.25554258 #C(1.2237759 3.1415927)
-3.3000016 0.1577473 #C(1.193923 3.1415927)
-3.2000017 0.058375858 #C(1.1631514 3.1415927)
-3.1000018 -0.04157885 #C(1.1314027 3.1415927)
-3.000002 -0.14111812 #C(1.0986129 3.1415927)
-2.900002 -0.23924738 #C(1.0647115 3.1415927)
-2.800002 -0.33498618 #C(1.0296202 3.1415927)
-2.7000022 -0.4273779 #C(0.9932526 3.1415927)
-2.6000023 -0.5154994 #C(0.95551234 3.1415927)
-2.5000024 -0.5984702 #C(0.9162917 3.1415927)
-2.4000025 -0.67546135 #C(0.87546974 3.1415927)
-2.3000026 -0.7457035 #C(0.83291024 3.1415927)
-2.2000027 -0.8084948 #C(0.7884586 3.1415927)
-2.1000028 -0.863208 #C(0.74193865 3.1415927)
-2.0000029 -0.9092962 #C(0.6931486 3.1415927)
-1.9000028 -0.9462992 #C(0.64185536 3.1415927)
-1.8000028 -0.973847 #C(0.5877882 3.1415927)
-1.7000028 -0.99166447 #C(0.5306299 3.1415927)
-1.6000028 -0.9995735 #C(0.47000536 3.1415927)
-1.5000027 -0.9974952 #C(0.40546694 3.1415927)
-1.4000027 -0.9854502 #C(0.33647418 3.1415927)
-1.3000027 -0.9635589 #C(0.26236632 3.1415927)
-1.2000027 -0.93204004 #C(0.18232378 3.1415927)
-1.1000026 -0.8912086 #C(0.09531259 3.1415927)
-1.0000026 -0.8414724 #C(2.622601e-6 3.1415927)
-0.9000026 -0.78332853 #C(-0.105357625 3.1415927)
-0.8000026 -0.7173579 #C(-0.22314033 3.1415927)
-0.70000255 -0.64421964 #C(-0.3566713 3.1415927)
-0.6000025 -0.5646446 #C(-0.5108214 3.1415927)
-0.5000025 -0.47942773 #C(-0.6931422 3.1415927)
-0.4000025 -0.38942066 #C(-0.91628444 3.1415927)
-0.30000252 -0.2955226 #C(-1.2039645 3.1415927)
-0.20000252 -0.1986718 #C(-1.6094253 3.1415927)
-0.10000252 -0.099835925 #C(-2.3025599 3.1415927)
-2.5182962e-6 -2.5182962e-6 #C(-12.891928 3.1415927)
0.09999748 0.09983091 -2.3026102
0.19999748 0.19866687 -1.6094505
0.29999748 0.2955178 -1.2039812
0.39999747 0.389416 -0.9162971
0.49999747 0.4794233 -0.69315225
0.59999746 0.5646404 -0.51082987
0.6999975 0.64421576 -0.35667855
0.7999975 0.71735436 -0.22314666
0.89999753 0.7833254 -0.10536326
0.99999756 0.84146965 -2.4437934e-6
1.0999975 0.89120626 0.095307924
1.1999975 0.9320382 0.1823195
1.2999976 0.96355754 0.2623624
1.3999976 0.9854493 0.3364705
1.4999976 0.9974948 0.40546352
1.5999976 0.99957365 0.47000214
1.6999977 0.9916651 0.5306269
1.7999977 0.97384816 0.58778536
1.8999977 0.9463008 0.6418527
1.9999977 0.90929836 0.69314605
2.0999978 0.8632105 0.74193627
2.1999977 0.8084978 0.7884563
2.2999976 0.74570686 0.8329081
2.3999975 0.67546505 0.87546766
2.4999974 0.59847426 0.9162897
2.5999973 0.5155037 0.9555104
2.6999972 0.4273824 0.9932507
2.799997 0.3349909 1.0296184
2.899997 0.23925224 1.0647097
2.999997 0.14112307 1.0986112
3.0999968 0.041583855 1.1314011
3.1999967 -0.05837086 1.1631498
3.2999966 -0.15774235 1.1939214
3.3999965 -0.25553775 1.2237744
3.4999964 -0.3507799 1.252762
3.5999963 -0.44251716 1.2809328
3.6999962 -0.52983296 1.3083318
3.7999961 -0.61185485 1.335
3.899996 -0.6877633 1.3609755
3.999996 -0.7567998 1.3862933
4.099996 -0.81827486 1.4109861
4.199996 -0.8715738 1.4350836
4.299996 -0.9161643 1.4586141
4.399996 -0.9516008 1.4816036
4.4999957 -0.9775292 1.5040765
4.5999956 -0.9936905 1.5260553
4.6999955 -0.9999232 1.5475615
4.7999954 -0.99616504 1.568615
4.8999953 -0.98245347 1.5892342
4.999995 -0.9589256 1.609437
end

-5 0.9589243 #C(1.609438 3.1415927)
-4.9 0.9824526 #C(1.5892352 3.1415927)
-4.8 0.9961646 #C(1.5686159 3.1415927)
-4.7000003 0.9999233 #C(1.5475626 3.1415927)
-4.6000004 0.993691 #C(1.5260564 3.1415927)
-4.5000005 0.97753024 #C(1.5040776 3.1415927)
-4.4000006 0.9516022 #C(1.4816047 3.1415927)
-4.3000007 0.9161662 #C(1.4586152 3.1415927)
-4.200001 0.87157613 #C(1.4350847 3.1415927)
-4.100001 0.8182776 #C(1.4109871 3.1415927)
-4.000001 0.7568031 #C(1.3862946 3.1415927)
-3.900001 0.6877669 #C(1.3609768 3.1415927)
-3.8000011 0.6118588 #C(1.3350013 3.1415927)
-3.7000012 0.5298372 #C(1.3083332 3.1415927)
-3.6000013 0.44252163 #C(1.2809342 3.1415927)
-3.5000014 0.35078457 #C(1.2527634 3.1415927)
-3.4000015 0.25554258 #C(1.2237759 3.1415927)
-3.3000016 0.1577473 #C(1.193923 3.1415927)
-3.2000017 0.058375858 #C(1.1631514 3.1415927)
-3.1000018 -0.04157885 #C(1.1314027 3.1415927)
-3.000002 -0.14111812 #C(1.0986129 3.1415927)
-2.900002 -0.23924738 #C(1.0647115 3.1415927)
-2.800002 -0.33498618 #C(1.0296202 3.1415927)
-2.7000022 -0.4273779 #C(0.9932526 3.1415927)
-2.6000023 -0.5154994 #C(0.95551234 3.1415927)
-2.5000024 -0.5984702 #C(0.9162917 3.1415927)
-2.4000025 -0.67546135 #C(0.87546974 3.1415927)
-2.3000026 -0.7457035 #C(0.83291024 3.1415927)
-2.2000027 -0.8084948 #C(0.7884586 3.1415927)
-2.1000028 -0.863208 #C(0.74193865 3.1415927)
-2.0000029 -0.9092962 #C(0.6931486 3.1415927)
-1.9000028 -0.9462992 #C(0.64185536 3.1415927)
-1.8000028 -0.973847 #C(0.5877882 3.1415927)
-1.7000028 -0.99166447 #C(0.5306299 3.1415927)
-1.6000028 -0.9995735 #C(0.47000536 3.1415927)
-1.5000027 -0.9974952 #C(0.40546694 3.1415927)
-1.4000027 -0.9854502 #C(0.33647418 3.1415927)
-1.3000027 -0.9635589 #C(0.26236632 3.1415927)
-1.2000027 -0.93204004 #C(0.18232378 3.1415927)
-1.1000026 -0.8912086 #C(0.09531259 3.1415927)
-1.0000026 -0.8414724 #C(2.622601e-6 3.1415927)
-0.9000026 -0.78332853 #C(-0.105357625 3.1415927)
-0.8000026 -0.7173579 #C(-0.22314033 3.1415927)
-0.70000255 -0.64421964 #C(-0.3566713 3.1415927)
-0.6000025 -0.5646446 #C(-0.5108214 3.1415927)
-0.5000025 -0.47942773 #C(-0.6931422 3.1415927)
-0.4000025 -0.38942066 #C(-0.91628444 3.1415927)
-0.30000252 -0.2955226 #C(-1.2039645 3.1415927)
-0.20000252 -0.1986718 #C(-1.6094253 3.1415927)
-0.10000252 -0.099835925 #C(-2.3025599 3.1415927)
-2.5182962e-6 -2.5182962e-6 #C(-12.891928 3.1415927)
0.09999748 0.09983091 -2.3026102
0.19999748 0.19866687 -1.6094505
0.29999748 0.2955178 -1.2039812
0.39999747 0.389416 -0.9162971
0.49999747 0.4794233 -0.69315225
0.59999746 0.5646404 -0.51082987
0.6999975 0.64421576 -0.35667855
0.7999975 0.71735436 -0.22314666
0.89999753 0.7833254 -0.10536326
0.99999756 0.84146965 -2.4437934e-6
1.0999975 0.89120626 0.095307924
1.1999975 0.9320382 0.1823195
1.2999976 0.96355754 0.2623624
1.3999976 0.9854493 0.3364705
1.4999976 0.9974948 0.40546352
1.5999976 0.99957365 0.47000214
1.6999977 0.9916651 0.5306269
1.7999977 0.97384816 0.58778536
1.8999977 0.9463008 0.6418527
1.9999977 0.90929836 0.69314605
2.0999978 0.8632105 0.74193627
2.1999977 0.8084978 0.7884563
2.2999976 0.74570686 0.8329081
2.3999975 0.67546505 0.87546766
2.4999974 0.59847426 0.9162897
2.5999973 0.5155037 0.9555104
2.6999972 0.4273824 0.9932507
2.799997 0.3349909 1.0296184
2.899997 0.23925224 1.0647097
2.999997 0.14112307 1.0986112
3.0999968 0.041583855 1.1314011
3.1999967 -0.05837086 1.1631498
3.2999966 -0.15774235 1.1939214
3.3999965 -0.25553775 1.2237744
3.4999964 -0.3507799 1.252762
3.5999963 -0.44251716 1.2809328
3.6999962 -0.52983296 1.3083318
3.7999961 -0.61185485 1.335
3.899996 -0.6877633 1.3609755
3.999996 -0.7567998 1.3862933
4.099996 -0.81827486 1.4109861
4.199996 -0.8715738 1.4350836
4.299996 -0.9161643 1.4586141
4.399996 -0.9516008 1.4816036
4.4999957 -0.9775292 1.5040765
4.5999956 -0.9936905 1.5260553
4.6999955 -0.9999232 1.5475615
4.7999954 -0.99616504 1.568615
4.8999953 -0.98245347 1.5892342
4.999995 -0.9589256 1.609437
end

-5 0.9589243 #C(1.609438 3.1415927)
-4.9 0.9824526 #C(1.5892352 3.1415927)
-4.8 0.9961646 #C(1.5686159 3.1415927)
-4.7000003 0.9999233 #C(1.5475626 3.1415927)
-4.6000004 0.993691 #C(1.5260564 3.1415927)
-4.5000005 0.97753024 #C(1.5040776 3.1415927)
-4.4000006 0.9516022 #C(1.4816047 3.1415927)
-4.3000007 0.9161662 #C(1.4586152 3.1415927)
-4.200001 0.87157613 #C(1.4350847 3.1415927)
-4.100001 0.8182776 #C(1.4109871 3.1415927)
-4.000001 0.7568031 #C(1.3862946 3.1415927)
-3.900001 0.6877669 #C(1.3609768 3.1415927)
-3.8000011 0.6118588 #C(1.3350013 3.1415927)
-3.7000012 0.5298372 #C(1.3083332 3.1415927)
-3.6000013 0.44252163 #C(1.2809342 3.1415927)
-3.5000014 0.35078457 #C(1.2527634 3.1415927)
-3.4000015 0.25554258 #C(1.2237759 3.1415927)
-3.3000016 0.1577473 #C(1.193923 3.1415927)
-3.2000017 0.058375858 #C(1.1631514 3.1415927)
-3.1000018 -0.04157885 #C(1.1314027 3.1415927)
-3.000002 -0.14111812 #C(1.0986129 3.1415927)
-2.900002 -0.23924738 #C(1.0647115 3.1415927)
-2.800002 -0.33498618 #C(1.0296202 3.1415927)
-2.7000022 -0.4273779 #C(0.9932526 3.1415927)
-2.6000023 -0.5154994 #C(0.95551234 3.1415927)
-2.5000024 -0.5984702 #C(0.9162917 3.1415927)
-2.4000025 -0.67546135 #C(0.87546974 3.1415927)
-2.3000026 -0.7457035 #C(0.83291024 3.1415927)
-2.2000027 -0.8084948 #C(0.7884586 3.1415927)
-2.1000028 -0.863208 #C(0.74193865 3.1415927)
-2.0000029 -0.9092962 #C(0.6931486 3.1415927)
-1.9000028 -0.9462992 #C(0.64185536 3.1415927)
-1.8000028 -0.973847 #C(0.5877882 3.1415927)
-1.7000028 -0.99166447 #C(0.5306299 3.1415927)
-1.6000028 -0.9995735 #C(0.47000536 3.1415927)
-1.5000027 -0.9974952 #C(0.40546694 3.1415927)
-1.4000027 -0.9854502 #C(0.33647418 3.1415927)
-1.3000027 -0.9635589 #C(0.26236632 3.1415927)
-1.2000027 -0.93204004 #C(0.18232378 3.1415927)
-1.1000026 -0.8912086 #C(0.09531259 3.1415927)
-1.0000026 -0.8414724 #C(2.622601e-6 3.1415927)
-0.9000026 -0.78332853 #C(-0.105357625 3.1415927)
-0.8000026 -0.7173579 #C(-0.22314033 3.1415927)
-0.70000255 -0.64421964 #C(-0.3566713 3.1415927)
-0.6000025 -0.5646446 #C(-0.5108214 3.1415927)
-0.5000025 -0.47942773 #C(-0.6931422 3.1415927)
-0.4000025 -0.38942066 #C(-0.91628444 3.1415927)
-0.30000252 -0.2955226 #C(-1.2039645 3.1415927)
-0.20000252 -0.1986718 #C(-1.6094253 3.1415927)
-0.10000252 -0.099835925 #C(-2.3025599 3.1415927)
-2.5182962e-6 -2.5182962e-6 #C(-12.891928 3.1415927)
0.09999748 0.09983091 -2.3026102
0.19999748 0.19866687 -1.6094505
0.29999748 0.2955178 -1.2039812
0.39999747 0.389416 -0.9162971
0.49999747 0.4794233 -0.69315225
0.59999746 0.5646404 -0.51082987
0.6999975 0.64421576 -0.35667855
0.7999975 0.71735436 -0.22314666
0.89999753 0.7833254 -0.10536326
0.99999756 0.84146965 -2.4437934e-6
1.0999975 0.89120626 0.095307924
1.1999975 0.9320382 0.1823195
1.2999976 0.96355754 0.2623624
1.3999976 0.9854493 0.3364705
1.4999976 0.9974948 0.40546352
1.5999976 0.99957365 0.47000214
1.6999977 0.9916651 0.5306269
1.7999977 0.97384816 0.58778536
1.8999977 0.9463008 0.6418527
1.9999977 0.90929836 0.69314605
2.0999978 0.8632105 0.74193627
2.1999977 0.8084978 0.7884563
2.2999976 0.74570686 0.8329081
2.3999975 0.67546505 0.87546766
2.4999974 0.59847426 0.9162897
2.5999973 0.5155037 0.9555104
2.6999972 0.4273824 0.9932507
2.799997 0.3349909 1.0296184
2.899997 0.23925224 1.0647097
2.999997 0.14112307 1.0986112
3.0999968 0.041583855 1.1314011
3.1999967 -0.05837086 1.1631498
3.2999966 -0.15774235 1.1939214
3.3999965 -0.25553775 1.2237744
3.4999964 -0.3507799 1.252762
3.5999963 -0.44251716 1.2809328
3.6999962 -0.52983296 1.3083318
3.7999961 -0.61185485 1.335
3.899996 -0.6877633 1.3609755
3.999996 -0.7567998 1.3862933
4.099996 -0.81827486 1.4109861
4.199996 -0.8715738 1.4350836
4.299996 -0.9161643 1.4586141
4.399996 -0.9516008 1.4816036
4.4999957 -0.9775292 1.5040765
4.5999956 -0.9936905 1.5260553
4.6999955 -0.9999232 1.5475615
4.7999954 -0.99616504 1.568615
4.8999953 -0.98245347 1.5892342
4.999995 -0.9589256 1.609437
end





set output" 
In [31]:
(defun using-unicode-characters-plot (output)
  (with-plots (s :debug nil)
    (gp-setup :output output :terminal '(pngcairo))
    (gp :set :samples 500)
    (gp :set :encoding 'utf8)
    (gp :set :title "favorite graph of ǫrnólfr þórðr")
    'font
    "helvetica, 24"
    (plot "[0:10] sin(1/x)"))
  output)
(png-from-file
 (using-unicode-characters-plot "images/using-unicode-characters-plot.png"))
Out[31]:
USING-UNICODE-CHARACTERS-PLOT
SB-INT:SIMPLE-STYLE-WARNING: The variable S is defined but never used.

3 Applying Colors and Styles¶

In [32]:
(defun coloring-curves-plot (output)
  (with-plots (s :debug nil)
    (gp-setup :output output :terminal '(pngcairo solid lw 4) :xrange '(0 1))
    (gp :set :border '(lw 0.25))
    (gp :set :key '(top left))
    (plot
     "x**0.5" :lc '(rgb "orange"))
    (plot
     "x" :lc '(rgb "steelblue"))
    (plot
     "x**2" :lc '(rgb "bisque"))
    (plot
     "x**3" :lc '(rgb "seagreen")))
  output)
(png-from-file (coloring-curves-plot "images/coloring-curves-plot.png"))
Out[32]:
COLORING-CURVES-PLOT
SB-INT:SIMPLE-STYLE-WARNING: The variable S is defined but never used.
In [33]:
(defun styling-curves-plot (output)
  (with-plots (s :debug nil)
    (gp-setup :output output :terminal '(pngcairo solid lw 4) :xrange '(0 1))
    (gp :set :key '(top left))
    (gp :set :style '(:line 1 lt 3 lw 4 lc rgb ("'#990042'")))
    (gp :set :style '(:line 2 lt 7 lw 3 lc rgb ("'#31f120'")))
    (gp :set :style '(:line 3 lt 2 lw 3 lc rgb ("'#0044a5'")))
    (gp :set :style '(:line 4 lt 9 lw 4 lc rgb ("'#888888'")))
    (plot "x**0.5" :ls 1)
    (plot "x"      :ls 2)
    (plot "x**2"   :ls 3)
    (plot "x**3"   :ls 4))
  output)
(png-from-file (styling-curves-plot "images/styling-curves-plot.png"))
Out[33]:
STYLING-CURVES-PLOT
SB-INT:SIMPLE-STYLE-WARNING: The variable S is defined but never used.
In [34]:
(defun styling-curves--userstyles-plot (output)
  (with-plots (s :debug nil)
    (gp-setup :output output :terminal '(pngcairo solid lw 4) :xrange '(0 1))
    (gp :set :key '(top left))
    (gp :set :style '(increment userstyles))
    (gp :set :style '(:line 1 lt 3 lw 4 lc rgb ("'#990042'")))
    (gp :set :style '(:line 2 lt 7 lw 3 lc rgb ("'#31f120'")))
    (gp :set :style '(:line 3 lt 2 lw 3 lc rgb ("'#0044a5'")))
    (gp :set :style '(:line 4 lt 9 lw 4 lc rgb ("'#888888'")))
    (plot "x**0.5")
    (plot "x"     )
    (plot "x**2"  )
    (plot "x**3"  ))
  output)
(png-from-file
 (styling-curves--userstyles-plot
  "images/styling-curves--userstyles-plot.png"))
Out[34]:
STYLING-CURVES--USERSTYLES-PLOT
SB-INT:SIMPLE-STYLE-WARNING: The variable S is defined but never used.
In [35]:
(defun transparency-plot (output)
  (with-plots (s :debug nil)
    (gp-setup :output output :terminal '(pngcairo))
    (gp :set :style '(fill transparent solid 0.3))
    (plot
     "[0:pi] sin(x)**2 with filledcurves above y1=0 lc rgb '#00ffff', 0.75*cos(2*x)**2 with filledcurves above y1=0 lc rgb '#aa00aa'"))
  output)
(png-from-file (transparency-plot "images/transparency-plot.png"))
Out[35]:
TRANSPARENCY-PLOT
SB-INT:SIMPLE-STYLE-WARNING: The variable S is defined but never used.
In [36]:
(defun plotting-points-with-curves-plot (output)
  (with-plots (s :debug nil)
    (gp-setup :output output :terminal '(pngcairo))
    (plot "sin(x)/x with linespoints ps 2 pt 6"))
  output)
(png-from-file
 (plotting-points-with-curves-plot
  "images/plotting-points-with-curves-plot.png"))
Out[36]:
PLOTTING-POINTS-WITH-CURVES-PLOT
SB-INT:SIMPLE-STYLE-WARNING: The variable S is defined but never used.
In [37]:
(defun changing-the-point-style-plot (output)
  (with-plots (s :debug nil)
    (gp-setup :output output :terminal '(pngcairo))
    (gp :set :key '(top left))
    (gp :set :style '#'linespoints)
    (gp :set :style '(line 1 lw 4 lc rgb ("'#990042'") ps 2 pt 6 pi 5))
    (gp :set :style '(line 2 lw 3 lc rgb ("'#31f120'") ps 2 pt 12 pi 3))
    (gp :set :style '(line 3 lw 3 lc rgb ("'#0044a5'") ps 2 pt 9 pi 5))
    (gp :set :style '(line 4 lw 4 lc rgb ("'#888888'") ps 2 pt 7 pi 4))
    (plot "[0:1] x**0.5 ls 1, x ls 2, x**2 ls 3, x**3 ls 4"))
  output)
(png-from-file
 (changing-the-point-style-plot "images/changing-the-point-style-plot.png"))
Out[37]:
CHANGING-THE-POINT-STYLE-PLOT
SB-INT:SIMPLE-STYLE-WARNING: The variable S is defined but never used.
In [38]:
(defun plotting-with-objects-plot (output)
  (with-plots (s :debug nil)
    (gp-setup :output output :terminal '(pngcairo) :object
              '(1 circle at graph |0.5 , 0.5| size graph 0.25 fillcolor rgb
                ("'blue'") fillstyle solid arc |[0:30]| front)
              :object
              '(2 circle at graph |0.5 , 0.5| size graph 0.25 fillcolor rgb
                ("'red'") fillstyle solid arc |[30:80]| front)
              :object
              '(3 circle at graph |0.5 , 0.5| size graph 0.25 fillcolor rgb
                ("'orange'") fillstyle solid arc |[80:180]| front)
              :object
              '(4 circle at graph |0.5 , 0.5| size graph 0.25 fillcolor rgb
                ("'green'") fillstyle solid arc |[180:240]| front)
              :object
              '(5 circle at graph |0.5 , 0.5| size graph 0.25 fillcolor rgb
                ("'sandybrown'") fillstyle solid arc |[240:360]| front))
    (gp :unset :key)
    (gp :unset :tics)
    (plot "[0:1][0:1] -1"))
  output)
(png-from-file
 (plotting-with-objects-plot "images/plotting-with-objects-plot.png"))
Out[38]:
PLOTTING-WITH-OBJECTS-PLOT
SB-INT:SIMPLE-STYLE-WARNING: The variable S is defined but never used.

4 Controlling Your Tics¶

In [39]:
(defun adding-minor-tics-plot (output)
  (with-plots (s :debug nil)
    (gp-setup :output output :terminal '(pngcairo))
    (gp :set :grid 'nil)
    (gp :set :mxtics 4)
    (gp :set :mytics 2)
    (plot "[0:2*pi] sin(12*x)*exp(-x/4)"))
  output)
(png-from-file (adding-minor-tics-plot "images/adding-minor-tics-plot.png"))
Out[39]:
ADDING-MINOR-TICS-PLOT
SB-INT:SIMPLE-STYLE-WARNING: The variable S is defined but never used.
In [40]:
(defun placing-tics-on-second-y-axis-plot (output)
  (with-plots (s :debug nil)
    (gp-setup :output output
                           :terminal '(pngcairo)) ;
    (gp :set :ytics 'nomirror)
    (gp :set :y2tics 0.4)
    (gp :set :xtics '("pi/4."))
    (plot "[0:2*pi] sin(x) axis x1y1, 2*cos(8*x)*exp(-x) axis x1y2"))
  output)
(png-from-file
 (placing-tics-on-second-y-axis-plot
  "images/placing-tics-on-second-y-axis-plot.png"))
Out[40]:
PLACING-TICS-ON-SECOND-Y-AXIS-PLOT
SB-INT:SIMPLE-STYLE-WARNING: The variable S is defined but never used.
In [41]:
(defun adjusting-the-tic-size-plot (output)
  (with-plots (s :debug nil)
    (gp-setup :output output
              :terminal '(pngcairo)) ;
    (gp :set :tics '(scale 3))
    (gp :set :mxtics 4)
    (gp :set :mytics 4)
    (plot "[0:4*pi] sin(x)/x"))
  output)

(png-from-file
 (adjusting-the-tic-size-plot "images/adjusting-the-tic-size-plot.png"))
Out[41]:
ADJUSTING-THE-TIC-SIZE-PLOT
SB-INT:SIMPLE-STYLE-WARNING: The variable S is defined but never used.
In [42]:
(defun removing-all-tics-plot (output)
  (with-plots (s :debug nil)
    (gp-setup :output output :terminal '(pngcairo))
    (gp :unset :tics)
    (plot "[0:2*pi] x**2*sin(x)"))
  output)
(png-from-file (removing-all-tics-plot "images/removing-all-tics-plot.png"))
Out[42]:
REMOVING-ALL-TICS-PLOT
SB-INT:SIMPLE-STYLE-WARNING: The variable S is defined but never used.
In [43]:
(defun defining-tic-values-plot (output)
  (with-plots (s :debug nil)
    (gp-setup :output output
                           :terminal '(pngcairo)) ;
    (gp :unset :border)
    (gp :set :xtics :axis :nomirror)
    (gp :set :ytics :axis :nomirror)
    (gp :set :zeroaxis)
    (gp :set :polar)
    (gp :set :samples 500) 
    (gp :set :grid)
    (gp :unset :raxis)
    (gp :set :xtics '(15 2 30))
    (gp :set :ytics '(10 2 20))
    (plot "[0:12*pi] t"))
  output)

(png-from-file
 (defining-tic-values-plot "images/defining-tic-values-plot.png"))
Out[43]:
DEFINING-TIC-VALUES-PLOT
SB-INT:SIMPLE-STYLE-WARNING: The variable S is defined but never used.
In [44]:
(defun making-the-tics-stick-out-plot (output)
  (with-plots (s :debug nil)
    (gp-setup :output output :terminal '(pngcairo))
    (gp :set :tics 'out)
    (gp :set :grid 'nil)
    (plot "[-3:3] tanh(x)"))
  output)
(png-from-file
 (making-the-tics-stick-out-plot "images/making-the-tics-stick-out-plot.png"))
Out[44]:
MAKING-THE-TICS-STICK-OUT-PLOT
SB-INT:SIMPLE-STYLE-WARNING: The variable S is defined but never used.
In [45]:
(defun setting-manual-tics-plot (output)
  (with-plots (s :debug nil)
    (gp-setup :output output :terminal '(pngcairo))
    (gp :set :xtics '|('pi' pi, 'pi/2' pi/2, '2pi' 2*pi, '3pi/2' 3*pi/2, "0" 0)|)
    (plot "[0:2*pi] sin(x)"))
  output)
(png-from-file
 (setting-manual-tics-plot "images/setting-manual-tics-plot.png"))
Out[45]:
SETTING-MANUAL-TICS-PLOT
SB-INT:SIMPLE-STYLE-WARNING: The variable S is defined but never used.
In [46]:
(defun setting-manual-tics-enhanced-plot (output)
  (with-plots (s :debug nil)
    (gp-setup :output output :terminal '(pngcairo enhanced))
    (gp :set :xtics '|('{/symbol p}' pi, '{/symbol p}/2' pi/2, '2{/symbol p}' 2*pi, '3{/symbol p}/2' 3*pi/2, "0" 0)|)
    (plot "[0:2*pi] sin(x)"))
  output)
(png-from-file
 (setting-manual-tics-enhanced-plot
  "images/setting-manual-tics-enhanced-plot.png")
)
Out[46]:
SETTING-MANUAL-TICS-ENHANCED-PLOT
SB-INT:SIMPLE-STYLE-WARNING: The variable S is defined but never used.
In [47]:
(defun setting-manual-tics-enhanced-add-plot (output)
  (with-plots (s :debug nil)
    (gp-setup :output output :terminal '(pngcairo enhanced))
    (gp :set :xtics :add '|('{/symbol p}' pi, '2{/symbol p}' 2*pi)|)
    (plot "[0:2*pi] sin(x)"))
  output)
(png-from-file
 (setting-manual-tics-enhanced-add-plot
  "images/setting-manual-tics-enhanced-add-plot.png"))
Out[47]:
SETTING-MANUAL-TICS-ENHANCED-ADD-PLOT
SB-INT:SIMPLE-STYLE-WARNING: The variable S is defined but never used.
In [48]:
(defun plotting-with-dates-and-times-plot (output)
  (let ((datastream
         (clml.utility.data:fetch
          "https://mmaul.github.io/clml.data/sample/traffic-balance.csv"
          :stream t)))
    (with-plots (s :debug nil)
      (gp-setup :terminal '(pngcairo) :output output)
      (gp :set :title "interface utilization")
      (gp :set :xdata 'time)
      (gp :set :timefmt "%y/%m/%d:%h:%m:%s")
      (gp :set :format '(x "%d/%m/%y"))
      (gp :set :xtics '(rotate))
      (gp :unset :key)
      (let ((data (subseq (clml.utility.csv:read-csv-stream datastream :type-spec '(string float float float float float float))
                          0 1000)))
        (plot
          (lambda ()
             (loop for row across data
                   do (format s "~&~a ~{~a~^ ~}"
                              (map 'string
                                   (lambda (x)
                                     (if (equal #\  x)
                                         #\:
                                         x))
                                   (elt row 0))
                              (coerce (subseq row 1) 'list))))
           :using '(0 5) :with 'lines))))
  output)
(png-from-file
 (plotting-with-dates-and-times-plot
  "images/plotting-with-dates-and-times-plot.png"))
Out[48]:
PLOTTING-WITH-DATES-AND-TIMES-PLOT

The plot below requires gnuplot version 5

In [49]:
(defun changing-language-used-in-labels-plot (output)
  (let ((datastream
         (clml.utility.data:fetch
          "https://mmaul.github.io/clml.data/sample/traffic-balance.csv"
          :stream t)))
    (with-plots (s :debug nil)
      (gp-setup :terminal '(pngcairo) :output output)
      (gp :set :title "interface utilization")
      (gp :set :xdata 'time)
      (gp :set :locale "es_ES.utf8")
      (gp :set :timefmt "%y/%m/%d:%h:%m:%s")
      (gp :set :format '(x "%b %y"))
      (gp :set :xtics '(rotate))
      (gp :unset :key)
      (plot
       (lambda ()
         (loop for row across (subseq
                               (clml.utility.csv:read-csv-stream datastream :type-spec
                                                                 '(string float
                                                                          float
                                                                          float
                                                                          float
                                                                          float
                                                                          float))
                               0 10)
               do (format s "~&~a ~{~a~^ ~}"
                          (map 'string
                               (lambda (x)
                                 (if (equal #\  x)
                                     #\:
                                     x))
                               (elt row 0))
                          (coerce (subseq row 1) 'list))))
       :using '(0 5) :with 'lines)))
  output)
(png-from-file
 (changing-language-used-in-labels-plot
  "images/changing-language-used-in-labels-plot.png"))
Out[49]:
CHANGING-LANGUAGE-USED-IN-LABELS-PLOT

The plot below requires gnuplot version 5

In [50]:
(defun using-european-style-decimals-plot (output)
  (with-plots (s :debug nil)
    (gp-setup :output output :terminal '(pngcairo))
    (gp :set :decimalsign '(locale "es_ES.utf8"))
    (plot "[0:1] x**3"))
  output)
(png-from-file
 (using-european-style-decimals-plot
  "images/using-european-style-decimals-plot.png"))
Out[50]:
USING-EUROPEAN-STYLE-DECIMALS-PLOT
SB-INT:SIMPLE-STYLE-WARNING: The variable S is defined but never used.
In [51]:
(defun formatting-tic-labels-plot (output)
  (with-plots (s :debug nil)
    (gp-setup :output output :terminal '(pngcairo))
    (gp :set :ylabel "output power")
    (gp :set :format '(y "p = %.2f watts"))
    (gp :set :format '(x "%.3f%%"))
    (gp :set :rmargin 6)
    (plot "[0:1] x**3"))
  output)
(png-from-file
 (formatting-tic-labels-plot "images/formatting-tic-labels-plot.png"))
Out[51]:
FORMATTING-TIC-LABELS-PLOT
SB-INT:SIMPLE-STYLE-WARNING: The variable S is defined but never used.
In [52]:
(defun tic-no-labels-plot (output)
  (with-plots (s :debug nil)
    (gp-setup :output output :terminal '(pngcairo enhanced))
    (gp :set :ylabel "output power")
    (gp :set :format '(y ""))
    (gp :set :format '(x ""))
    (gp :set :grid)
    (gp :unset :key)
    (plot "x, -x"))
  output)
(png-from-file (tic-no-labels-plot "images/tic-no-labels-plot.png"))
Out[52]:
TIC-NO-LABELS-PLOT
SB-INT:SIMPLE-STYLE-WARNING: The variable S is defined but never used.

5 Combining Multiple Plots¶

In [53]:
(defun multiplot (output)
  (with-plots (s :debug nil)
    (gp-setup :output output :terminal '(:pngcairo) :title "multiplot"
              :multiplot (list "layout 2,2 columnsfirst title \"multiplot\""))
    (plot "besj0(x)")
    (plot "besj1(x)")
    (plot "besy0(x)")
    (plot "besy1(x)")
    (gp :unset 'multiplot))
  output)
(png-from-file (multiplot "images/multiplot.png"))
Out[53]:
MULTIPLOT
SB-INT:SIMPLE-STYLE-WARNING: The variable S is defined but never used.
In [54]:
(defun stem-multiplot (output)
  (with-plots (s :debug nil)
    (gp-setup :output output :terminal '(:pngcairo) :title "candlestick"
              :xrange '(0 5) :yrange '(0 25) :multiplot
              (list "layout 2,1 columnsfirst title \"multiplot stem\""))
    
    (flet ((data ()
             (loop for r in '((1 5 7 10 15 24 0.3 "quick")
                              (2 6 8 11 16 23 0.4 "fox")
                              (3 5 7 11 17 22 0.5 "lazy")
                              (4 6 9 10 18 21 0.3 "dog"))
                 do (format s "~&~{~^~a ~}" r))))
    (plot #'data :using '(1 6 |xticlabels(8)|) :with :impulses :lw 4 :title "counts")
    (plot #'data :using '(1 6) :with :points :pt 9 :notitle ())
    (gp :unset 'multiplot)))
  output)
(png-from-file (stem-multiplot "images/stem-multiplot.png"))
Out[54]:
STEM-MULTIPLOT
In [55]:
(defun plot-positioning-plot (output)
  (with-plots (s :debug t)
    (gp-setup :output output :terminal '(:pngcairo) :multiplot (list ""))
    (gp :set :title "o     o")
    (gp :set :polar 'nil)
    (gp :set :size (list "1,.5"))
    (gp :set :border 0)
    (gp :unset :key)
    (gp :unset :tics)
    (gp :unset :raxis)
    (plot "[pi:2*pi] -1" :lw 5)
    (gp :set :title "###################")
    (gp :set :origin (list "0,.5"))
    (gp :set :size (list ".5, .5"))
    (plot "-2*pi" :lw (list "2, .2") :with 'filledcurves)
    (gp :set :origin (list ".5, .5"))
    (gp :set :title "###################")
    (plot "1" :lw (list "2, .2") :with 'filledcurves)
    (gp :unset 'multiplot))
  output)
(png-from-file (plot-positioning-plot "images/plot-positioning.png"))
Out[55]:
PLOT-POSITIONING-PLOT
SB-INT:SIMPLE-STYLE-WARNING: The variable S is defined but never used.
" set terminal pngcairo 
 set output \"images/plot-positioning.png\" 
 set multiplot  
 set title \"o     o\" 
 set polar  
 set size 1,.5 
 set border 0 
 unset key 
 unset tics 
 unset raxis 
plot [pi:2*pi] -1 lw 5
plot -2*pi lw 2, .2 with filledcurves
plot 1 lw 2, .2 with filledcurves
 set title \"###################\" 
 set origin 0,.5 
 set size .5, .5 
 set origin .5, .5 
 set title \"###################\" 
 unset multiplot 
set output" 
In [56]:
(defun inset-plot (output)
  (with-plots (s :debug t)
    (gp-setup :output output :terminal '(:pngcairo) :multiplot (list ""))
    (gp :set :object :ellipse :center '(0.13 0) :size '(0.4 4))
    (gp :set :arrow :from '(0.1 2.1) :to :screen '(0.22 0.4) :front :lt 3 :lw 3)
    (gp :set :samples 1000)
    (gp :set :grid 'nil)
    (gp :set :xtics 0.4)
    (gp :set :ytics 4)
    (plot "[0:2*pi] exp(x)*sin(1/x)")
    (gp :set :origin '(0.2 0.4))
    (gp :set :size '(0.25 0.25))
    (gp :clear)
    (gp :unset :grid)
    (gp :unset :object)
    (gp :unset :arrow)
    (gp :set :xtics 0.1)
    (gp :set :ytics 0.5)
    (gp :set :bmargin 1)
    (gp :set :tmargin 1)
    (gp :set :lmargin 3)
    (gp :set :rmargin 1)      
    (plot "[0:.2] exp(x)*sin(1/x)")
    (gp :unset 'multiplot))
  output)
(png-from-file (inset-plot "images/inset-plot.png"))
Out[56]:
INSET-PLOT
SB-INT:SIMPLE-STYLE-WARNING: The variable S is defined but never used.
" set terminal pngcairo 
 set output \"images/inset-plot.png\" 
 set multiplot  
 set object ellipse center 0.13,0 size 0.4,4 
 set arrow from 0.1,2.1 to screen 0.22,0.4 front lt 3 lw 3 
 set samples 1000 
 set grid  
 set xtics 0.4 
 set ytics 4 
plot [0:2*pi] exp(x)*sin(1/x)
plot [0:.2] exp(x)*sin(1/x)
 set origin 0.2,0.4 
 set size 0.25,0.25 
 clear 
 unset grid 
 unset object 
 unset arrow 
 set xtics 0.1 
 set ytics 0.5 
 set bmargin 1 
 set tmargin 1 
 set lmargin 3 
 set rmargin 1 
 unset multiplot 
set output" 
In [57]:
(defun multiplot-w-labels-and-arrows (output)
  (with-plots (s :debug t)
    (gp-setup :output output
              :terminal '(pngcairo)
              :title "derivatives of sin(x)"
              :font "times-roman, 22")

    (gp :set :multiplot :layout '(2 2))
    (gp :unset :key)
    (gp :set :xrange '(-pi pi))
    (gp :set :arrow
        :from '(0.1 2.1) :to :screen '(0.22 0.4) :front :lt 3)
    (gp :set :style
        :arrow 1 :head :filled :size :screen '(0.03 15 135) :lt 2 :lw 2)
    (gp :set :arrow
        :from :screen '(0.45 0.84) :to :screen '(0.65 0.84) :arrowstyle 1)
    (gp :set :arrow
        :from :screen '(0.87 0.64) :to :screen '(0.87 0.3) :arrowstyle 1)
    (gp :set :arrow
        :from :screen '(0.7 0.15) :to :screen '(0.4 0.15) :arrowstyle 1)
    (gp :set :arrow
        :from :screen '(0.35 0.35) :to :screen '(0.35 0.7) :arrowstyle 1)
    (gp :set :title "sin(x)")
    (plot "sin(x)")
    (gp :set :title "sin'(x) = cos(x)")
    (plot "cos(x)")
    (gp :set :title "sin'''(x) = cos''(x) = -sin'(x) = -cos(x)")
    (plot "-cos(x)")
    (gp :set :title "sin''(x) = cos'(x) = -sin(x)")
    (plot "-sin(x)")
    (gp :unset :multiplot))
  output)
(png-from-file
 (multiplot-w-labels-and-arrows "images/multiplot-w-labels-and-arrows.png"))
Out[57]:
MULTIPLOT-W-LABELS-AND-ARROWS
SB-INT:SIMPLE-STYLE-WARNING: The variable S is defined but never used.
" set terminal pngcairo 
 set output \"images/multiplot-w-labels-and-arrows.png\" 
 set title \"derivatives of sin(x)\" 
 set font \"times-roman, 22\" 
 set multiplot layout 2,2 
 unset key 
 set xrange [-pi:pi] 
 set arrow from 0.1,2.1 to screen 0.22,0.4 front lt 3 
 set style arrow 1 head filled size screen 0.03,15,135 lt 2 lw 2 
 set arrow from screen 0.45,0.84 to screen 0.65,0.84 arrowstyle 1 
 set arrow from screen 0.87,0.64 to screen 0.87,0.3 arrowstyle 1 
 set arrow from screen 0.7,0.15 to screen 0.4,0.15 arrowstyle 1 
 set arrow from screen 0.35,0.35 to screen 0.35,0.7 arrowstyle 1 
 set title \"sin(x)\" 
plot sin(x), cos(x), -cos(x), -sin(x)
 set title \"sin'(x) = cos(x)\" 
 set title \"sin'''(x) = cos''(x) = -sin'(x) = -cos(x)\" 
 set title \"sin''(x) = cos'(x) = -sin(x)\" 
 unset multiplot 
set output" 

7 Proramming gnuplot and dealing with data¶

In [58]:
(defun plotting-on-sub-intervals-plot (output)
  (with-plots (s :debug nil)
    (gp-setup :terminal '(pngcairo) :output output)
    (gp :set :samples 2000)
    (gp '|f(x) = x < 0 ? sin(x) : NaN|)
    (gp '|g(x) = x >= 0 ? exp(-x/5.)*sin(x) : NaN|)
    (plot "[-20 : 20] f(x), g(x)"))
  output)
(png-from-file
 (plotting-on-sub-intervals-plot "images/plotting-on-sub-intervals-plot.png"))
Out[58]:
PLOTTING-ON-SUB-INTERVALS-PLOT
SB-INT:SIMPLE-STYLE-WARNING: The variable S is defined but never used.

Not working needs to repeat data section again for smoothing, but look for fix in the future

In [59]:
(defun smoothing-your-data-plot (output)
  (let ((s
         (clml.utility.data:fetch
          "http://www.google.com/finance/getprices?i=60&p=10d&f=d,o,h,l,c,v&df=cpct&q=ibm"
          :stream t)))
    (clml.utility.data:process-finance-header s)
    (with-plots (s :debug nil)
      (gp-setup :terminal '(pngcairo) :output output)
      (plot
       (lambda ()
         (loop for row across (subseq
                               (clml.utility.csv:read-csv-stream s :type-spec
                                                                 '(float float
                                                                         float
                                                                         float
                                                                         float
                                                                         float))
                               0 300)
               do (format s "~&~{~a~^ ~}" (coerce row 'list))))
       :using '(0 4) :with
       '(lines lw 0.5 notitle #\, ("''") smooth bezier lw 4 title
         "bezier smoothed"))))
  output)
;(png-from-file
; (smoothing-your-data-plot "images/smoothing-your-data-plot.png"))
Out[59]:
SMOOTHING-YOUR-DATA-PLOT

Not working needs to repeat data section again for smoothing, but look for fix in the future

In [60]:
(defun fit-functions-to-your-data-plot (output)
  (let ((s
         (clml.utility.data:fetch
          "http://www.google.com/finance/getprices?i=60&p=10d&f=d,o,h,l,c,v&df=cpct&q=ibm"
          :stream t)))
    (clml.utility.data:process-finance-header s)
    (with-plots (s :debug nil)
      (gp-setup :terminal '(pngcairo) :output output)
      (format s "~&f(x) = a*sin(b*x)~%")
      (format s "~&fit f(x) 'rs.dat' via a, b~%")
      (plot
       (lambda ()
         (loop for row across (subseq
                               (clml.utility.csv:read-csv-stream s :type-spec
                                                                 '(float float
                                                                         float
                                                                         float
                                                                         float
                                                                         float))
                               0 300)
               do (format s "~&~{~a~^ ~}" (coerce row 'list))))
       :using '(0 4) :with
       '(lines lw 0.5 notitle #\, f (x) lw 4 title " fit by gnuplot"))))
  output)
;(png-from-file
; (fit-functions-to-your-data-plot
;  "images/fit-functions-to-your-data-plot.png"))
Out[60]:
FIT-FUNCTIONS-TO-YOUR-DATA-PLOT

Not working needs to repeat data section again for smoothing, but look for fix in the future

In [61]:
(defun using-kdensity-to-improve-on-histograms-plot (output)
  (let ((s
         (clml.utility.data:fetch
          "http://www.google.com/finance/getprices?i=60&p=10d&f=d,o,h,l,c,v&df=cpct&q=ibm"
          :stream t)))
    (clml.utility.data:process-finance-header s)
    (with-plots (s :debug nil)
      (gp-setup :terminal '(pngcairo) :output output)
      (format s "~&f(x) = a*sin(b*x)~%")
      (format s "~&fit f(x) 'rs.dat' via a, b~%")
      (plot
       (lambda ()
         (loop for row across (subseq
                               (clml.utility.csv:read-csv-stream s :type-spec
                                                                 '(float float
                                                                         float
                                                                         float
                                                                         float
                                                                         float))
                               0 300)
               do (format s "~&~{~a~^ ~}" (coerce row 'list))))
       :using '(("1:(.001)") smooth kdensity))))
  output)
;(png-from-file
; (using-kdensity-to-improve-on-histograms-plot
;  "images/using-kdensity-to-improve-on-histograms-plot.png"))
Out[61]:
USING-KDENSITY-TO-IMPROVE-ON-HISTOGRAMS-PLOT

8 Third dimension¶

In [62]:
(defun 3d-plot (output)
  (with-plots (s :debug nil)
    (gp-setup :output output :terminal '(pngcairo))
    (gp :unset :key)
    (gp :set :isosamples 40)
    (gp :set :title "j_0(r^2)")
    (gp :set :xrange '(-4 4))
    (gp :set :yrange '(-4 4))
    (gp :set :ztics 1)
    (gp :set :view '(29 53))
    (splot "besj0(x**2+y**2)")
    (format s "~&replot~%"))
  output)
(png-from-file (3d-plot "images/3d-plot.png"))
Out[62]:
3D-PLOT
In [63]:
(defun pm3d-plot (output)
  (with-plots (s :debug nil)
    (gp-setup :output output :terminal '(pngcairo))
    (gp :unset :key)
    (gp :set :isosamples 40)
    (gp :set :title "j_0(r^2)")
    (gp :set :xrange '(-4 4))
    (gp :set :yrange '(-4 4))
    (gp :set :ztics 1)
    (gp :set :view '(29 53))
    (gp :set :pm3d 'nil)
    (gp :unset :surface)
    (splot "besj0(x**2+y**2)")
    (format s "~&replot~%"))
  output)
(png-from-file (pm3d-plot "images/pm3d-plot.png"))
Out[63]:
PM3D-PLOT
In [64]:
(defun pm3d2-plot (output)
  (with-plots (s :debug nil)
    (gp-setup :output output :terminal '(pngcairo))
    (gp :unset :key)
    (gp :set :isosamples 40)
    (gp :set :title "j_0(r^2)")
    (gp :set :xrange '(-4 4))
    (gp :set :yrange '(-4 4))
    (gp :set :ztics 1)
    (gp :unset :surf)
    (gp :set :view '(29 53))
    (gp :set :style '(line 1 lt 4 lw 0.5))
    (gp :set :pm3d '(at s hidden3d 1))
    (splot "besj0(x**2+y**2)")
    (format s "~&replot~%"))
  output)
(png-from-file (pm3d2-plot "images/pm3d2-plot.png"))
Out[64]:
PM3D2-PLOT