diff --git a/guide/guide-7.svg b/guide/guide-7.svg new file mode 100644 index 0000000..fea233d --- /dev/null +++ b/guide/guide-7.svg @@ -0,0 +1,633 @@ + + + +Gnuplot +Produced by GNUPLOT 5.4 patchlevel 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + -1 + + + + + + + + + + + + + -0.8 + + + + + + + + + + + + + -0.6 + + + + + + + + + + + + + -0.4 + + + + + + + + + + + + + -0.2 + + + + + + + + + + + + + 0 + + + + + + + + + + + + + 0.2 + + + + + + + + + + + + + 0.4 + + + + + + + + + + + + + 0.6 + + + + + + + + + + + + + 0.8 + + + + + + + + + + + + + 1 + + + + + + + + + + + + + -1 + + + + + + + + + + + + + -0.8 + + + + + + + + + + + + + -0.6 + + + + + + + + + + + + + -0.4 + + + + + + + + + + + + + -0.2 + + + + + + + + + + + + + 0 + + + + + + + + + + + + + 0.2 + + + + + + + + + + + + + 0.4 + + + + + + + + + + + + + 0.6 + + + + + + + + + + + + + 0.8 + + + + + + + + + + + + + 1 + + + + + + + + + gnuplot_plot_1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 0 + + + + + 50 + + + + + 100 + + + + + 150 + + + + + 200 + + + + + 250 + + + + + 300 + + + + + 350 + + + + + 400 + + + + + + + + + diff --git a/guide/guide-9.svg b/guide/guide-9.svg new file mode 100644 index 0000000..439e9b7 --- /dev/null +++ b/guide/guide-9.svg @@ -0,0 +1,657 @@ + + + +Gnuplot +Produced by GNUPLOT 5.4 patchlevel 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + -1 + + + + + + + + + + + + + -0.8 + + + + + + + + + + + + + -0.6 + + + + + + + + + + + + + -0.4 + + + + + + + + + + + + + -0.2 + + + + + + + + + + + + + 0 + + + + + + + + + + + + + 0.2 + + + + + + + + + + + + + 0.4 + + + + + + + + + + + + + 0.6 + + + + + + + + + + + + + 0.8 + + + + + + + + + + + + + 1 + + + + + + + + + + + + + -1 + + + + + + + + + + + + + -0.8 + + + + + + + + + + + + + -0.6 + + + + + + + + + + + + + -0.4 + + + + + + + + + + + + + -0.2 + + + + + + + + + + + + + 0 + + + + + + + + + + + + + 0.2 + + + + + + + + + + + + + 0.4 + + + + + + + + + + + + + 0.6 + + + + + + + + + + + + + 0.8 + + + + + + + + + + + + + 1 + + + + + + + + + gnuplot_plot_1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + gnuplot_plot_2 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 0 + + + + + 50 + + + + + 100 + + + + + 150 + + + + + 200 + + + + + 250 + + + + + 300 + + + + + 350 + + + + + 400 + + + + + + + + + diff --git a/guide/guide.org b/guide/guide.org index 0051e3c..2217a39 100644 --- a/guide/guide.org +++ b/guide/guide.org @@ -4,6 +4,7 @@ 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 gnuplot itself are demonstrated at [[http://www.gnuplot.info/demo/][its demo page]]. +* Tutorial First, a trivial plot: let's plot a sinusoid #+BEGIN_SRC sh :results file link :exports both @@ -18,11 +19,12 @@ seq 100 | \ This was a trivial plot, and was trivially-easy to make: we gave the tool one column of data with no specific instructions, and we got a plot. -Here each point we plotted was 2-dimensional (has an x value an a y value), but -we passed in only one number for each point. This is what is expected without -=--domain=, so =feedgnuplot= filled in sequential integers (0, 1, 2, ...) for -the x coordinate. Without =--domain= and without =--dataid=, each line of input -is interpreted as =y0 y1 y2...=. So we can plot a sin and a cos together: +Here each point we plotted was 2-dimensional (has an =x= value an a =y= value), +but we passed in only one number for each point. This is what is expected +without =--domain=, so =feedgnuplot= filled in sequential integers (0, 1, 2, +...) for the =x= coordinate. Without =--domain= and without =--dataid=, each line +of input is interpreted as =y0 y1 y2...=. So we can plot a sin and a cos +together: #+BEGIN_SRC sh :results file link :exports both seq 100 | \ @@ -33,21 +35,22 @@ seq 100 | \ #+RESULTS: [[file:guide-2.svg]] -Note that, the lines may have different numbers of points. To plot the cos from -every line, but a sin from every 5th line: +Note that, the lines may have different numbers of points. To plot the cosine +from every line, but a sine from every 5th line: #+BEGIN_SRC sh :results file link :exports both seq 100 | \ perl -nE '$th = $_/100.*2.*3.14159; $s=sin($th); $c=cos($th); - if($.%5) { say "$c"; } else { say "$c $s"; }' | \ + if($.%5) { say "$c"; } + else { say "$c $s"; }' | \ feedgnuplot #+END_SRC #+RESULTS: [[file:guide-3.svg]] -If we pass in two columns and =--domain=, =feedgnuplot= will use one for the x, -and the other for the y. With =--domain= and without =--dataid=, each line of +If we pass in two columns and =--domain=, =feedgnuplot= will use one for the =x=, +and the other for the =y=. With =--domain= and without =--dataid=, each line of input is interpreted as =x y0 y1 y2...=. Let's plot =sin(theta)= vs. =cos(theta)=, i.e. a circle: @@ -61,7 +64,7 @@ seq 100 | \ [[file:guide-4.svg]] Hmmm. We asked for a circle, but this looks more like an ellipse. Why? Because -gnuplot is autoscaling the x and y axes independently to fill the plot window. +gnuplot is autoscaling the =x= and =y= axes independently to fill the plot window. We can scale the axes /together/ by passing =--square=, and we get a circle: #+BEGIN_SRC sh :results file link :exports both @@ -78,9 +81,64 @@ number of =y=. Let's plot a circle /and/ an ellipse, sampled more coarsely: #+BEGIN_SRC sh :results file link :exports both seq 100 | \ perl -nE '$th = $_/100.*2.*3.14159; $s=sin($th); $c=cos($th); - if($.%5) { say "$c $s"; } else { $s2 = $s/2; say "$c $s $s2"; }' | \ + if($.%5) { say "$c $s"; } + else { $s2 = $s/2; + say "$c $s $s2"; }' | \ feedgnuplot --domain --square #+END_SRC #+RESULTS: [[file:guide-6.svg]] + +We just plotted something where each point is represented by 2 values: =x= and +=y=. When making 2D plots, this is the most common situation, but others are +possible. What if we want to color-code our points using another column of data? +We feed in the new column, and we tell =feedgnuplot= that we now have /3/ values +per point (the tuple size), and we tell =gnuplot= how we want this plot to be +made: + +#+BEGIN_SRC sh :results file link :exports both +seq 100 | \ + perl -nE '$thdeg = $_/100.*360.; + $th = $_/100.*2.*3.14159; + $s=sin($th); $c=cos($th); + say "$c $s $thdeg";' | \ + feedgnuplot --domain --square \ + --tuplesizeall 3 \ + --styleall 'with points palette' +#+END_SRC + +#+RESULTS: +[[file:guide-7.svg]] + +Here we said that /all/ the datasets have 3 values per point. And that /all/ the +datasets should be plotted with that particular style. The styles are strings +that are passed on to =gnuplot= verbatim. So the full power of =gnuplot= is +available, and there's nothing =feedgnuplot=-specific to learn. =gnuplot= has +plenty of documentation about styling details. + +The above =--styleall= argument may be identically replaced with a shorthand: + +#+BEGIN_SRC sh :results none :exports none +--with points palette' +#+END_SRC + +The styles and tuple sizes can be different for each dataset. For instance, to +apply the colors only to the circle, leaving the ellipse with the default tuple +size and style: + +#+BEGIN_SRC sh :results file link :exports both +seq 100 | \ + perl -nE '$thdeg = $_/100.*360.; + $th = $_/100.*2.*3.14159; + $s=sin($th); $c=cos($th); + if($.%5) { say "$c $s $thdeg" } + else { $s2 = $s/2; + say "$c $s $thdeg $s2"; }' | \ + feedgnuplot --domain --square \ + --tuplesize 0 3 \ + --style 0 'with points palette' +#+END_SRC + +#+RESULTS: +[[file:guide-9.svg]]