more guide stuff

This commit is contained in:
Dima Kogan 2021-02-20 15:47:11 -08:00
parent bf818d9898
commit 4fa5ab15fb
2 changed files with 81 additions and 13 deletions

View File

@ -23,14 +23,26 @@
;; This sets a default :file tag, set to a unique filename. I want each demo to ;; This sets a default :file tag, set to a unique filename. I want each demo to
;; produce an image, but I don't care what it is called. I omit the :file tag ;; produce an image, but I don't care what it is called. I omit the :file tag
;; completely, and this advice takes care of it ;; completely, and this advice takes care of it
(defun dima-info-local-get-property
(params what)
(condition-case nil
(cdr (assq what params))
(error "")))
(defun dima-org-babel-is-feedgnuplot
(params)
(and
(or (not (assq :file params))
(string-match "^guide-[0-9]+\\.svg$" (cdr (assq :file params))))
(string-match "\\<both\\>" (dima-info-local-get-property params :exports) )
(string-match "\\<file\\>" (dima-info-local-get-property params :results ))))
(defun dima-org-babel-sh-unique-plot-filename (defun dima-org-babel-sh-unique-plot-filename
(f &optional arg info params) (f &optional arg info params)
(let ((info-local (or info (org-babel-get-src-block-info t)))) (let ((info-local (or info (org-babel-get-src-block-info t))))
(if (and info-local (if (and info-local
(string= (car info-local) "sh") (string= (car info-local) "sh")
(not (assq :file (caddr info-local)))) (dima-org-babel-is-feedgnuplot (caddr info-local)))
;; We're looking at an sh block with no :file. Add a default :file ;; We're looking at a feedgnuplot block. Add a default :file
(funcall f arg info (funcall f arg info
(cons (cons ':file (cons (cons ':file
(format "guide-%d.svg" (format "guide-%d.svg"
@ -38,7 +50,7 @@
(setq dima-unique-plot-number (1+ dima-unique-plot-number)) (setq dima-unique-plot-number (1+ dima-unique-plot-number))
(error (setq dima-unique-plot-number 0))))) (error (setq dima-unique-plot-number 0)))))
params)) params))
;; already have a :file or not sh. Just do the normal thing ;; Not feedgnuplot. Just do the normal thing
(funcall f arg info params)))) (funcall f arg info params))))
(unless (unless
@ -64,11 +76,12 @@
;; need --hardcopy when generating the plots. I add the --hardcopy to the ;; need --hardcopy when generating the plots. I add the --hardcopy to the
;; command before running it ;; command before running it
(defun dima-org-babel-sh-set-demo-output (f body params) (defun dima-org-babel-sh-set-demo-output (f body params)
(with-temp-buffer (when (dima-org-babel-is-feedgnuplot params)
(insert body) (with-temp-buffer
(end-of-buffer) (insert body)
(insert (format " --terminal 'svg noenhanced solid size 800,600 font \",14\"' --hardcopy %s" (cdr (assq :file params)))) (end-of-buffer)
(setq body (buffer-substring-no-properties (point-min) (point-max)))) (insert (format " --terminal 'svg noenhanced solid size 800,600 font \",14\"' --hardcopy %s" (cdr (assq :file params))))
(setq body (buffer-substring-no-properties (point-min) (point-max)))))
(funcall f body params)) (funcall f body params))
(unless (unless
(advice-member-p (advice-member-p

View File

@ -1,5 +1,3 @@
* Guide
This is an overview of the capabilities of =feedgnuplot= and a set of example This is an overview of the capabilities of =feedgnuplot= and a set of example
recipes. The [[https://github.com/dkogan/feedgnuplot/][documentation]] provides a complete reference. The capabilities of recipes. The [[https://github.com/dkogan/feedgnuplot/][documentation]] provides a complete reference. The capabilities of
gnuplot itself are demonstrated at [[http://www.gnuplot.info/demo/][its demo page]]. gnuplot itself are demonstrated at [[http://www.gnuplot.info/demo/][its demo page]].
@ -139,6 +137,14 @@ The above =--styleall= argument may be identically replaced with a shorthand:
--with 'points palette' --with 'points palette'
#+END_EXAMPLE #+END_EXAMPLE
Note that the =--lines --points= specify the /default/ style only, so these
options do nothing here, and if we want lines /and/ points, we ask for those in
the style:
#+BEGIN_EXAMPLE
--with 'linespoints palette'
#+END_EXAMPLE
The styles and tuple sizes can be different for each dataset. For instance, to The styles and tuple sizes can be different for each dataset. For instance, to
apply the colors only to the circle (dataset 0), leaving the ellipse (dataset 1) apply the colors only to the circle (dataset 0), leaving the ellipse (dataset 1)
with the default tuple size and style: with the default tuple size and style:
@ -189,6 +195,55 @@ feedgnuplot --lines --points --domain --dataid --square \
#+RESULTS: #+RESULTS:
[[file:guide-9.svg]] [[file:guide-9.svg]]
Note that instead of labelling the datasets explicitly, we can pass Note that instead of labelling the datasets explicitly, we passed =--autolegend=
=--autolegend=, and the ID will be used to label each dataset. This works to use the ID as the label for each dataset. This works without =--dataid= also,
without =--dataid= also, but the IDs are then the unhelpful sequential integers. but the IDs are then the unhelpful sequential integers.
* Recipes
This is a good overview of the syntax and of the data interpretation. Let's demo
some fancy plots to serve as a cookbook.
Since the actual plotting is handled by =gnuplot=, its documentation and [[http://www.gnuplot.info/demo/][demos]]
are the primary reference on how to do stuff.
** Line, point sizes, thicknesses, styles
Most often, we're plotting lines or points. The most common styling keywords
are:
- =pt= (or equivalently =pointtype=)
- =ps= (or equivalently =pointsize=)
- =lt= (or equivalently =linetype=)
- =lw= (or equivalently =linewidth=)
- =lc= (or equivalently =linecolor=)
- =dt= (or equivalently =dashtype=)
For details about these and all other styles, see the =gnuplot= documentation.
For instance, the first little bit of the docs about the different line widths:
#+BEGIN_SRC sh :results output verbatim :exports both
gnuplot -e 'help linewidth' | head -n 20
#+END_SRC
#+RESULTS:
#+begin_example
Each terminal has a default set of line and point types, which can be seen
by using the command `test`. `set style line` defines a set of line types
and widths and point types and sizes so that you can refer to them later by
an index instead of repeating all the information at each invocation.
Syntax:
set style line <index> default
set style line <index> {{linetype | lt} <line_type> | <colorspec>}
{{linecolor | lc} <colorspec>}
{{linewidth | lw} <line_width>}
{{pointtype | pt} <point_type>}
{{pointsize | ps} <point_size>}
{{pointinterval | pi} <interval>}
{{pointnumber | pn} <max_symbols>}
{{dashtype | dt} <dashtype>}
{palette}
unset style line
show style line
`default` sets all line style parameters to those of the linetype with
#+end_example