Gnuplot.jl/dev/advanced/index.html
2020-03-31 02:09:00 +02:00

43 lines
12 KiB
HTML

<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8"/><meta name="viewport" content="width=device-width, initial-scale=1.0"/><title>Advanced techniques · Gnuplot.jl</title><link href="https://fonts.googleapis.com/css?family=Lato|Roboto+Mono" rel="stylesheet" type="text/css"/><link href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.11.2/css/fontawesome.min.css" rel="stylesheet" type="text/css"/><link href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.11.2/css/solid.min.css" rel="stylesheet" type="text/css"/><link href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.11.2/css/brands.min.css" rel="stylesheet" type="text/css"/><link href="https://cdnjs.cloudflare.com/ajax/libs/KaTeX/0.11.1/katex.min.css" rel="stylesheet" type="text/css"/><script>documenterBaseURL=".."</script><script src="https://cdnjs.cloudflare.com/ajax/libs/require.js/2.3.6/require.min.js" data-main="../assets/documenter.js"></script><script src="../siteinfo.js"></script><script src="../../versions.js"></script><link class="docs-theme-link" rel="stylesheet" type="text/css" href="../assets/themes/documenter-dark.css" data-theme-name="documenter-dark"/><link class="docs-theme-link" rel="stylesheet" type="text/css" href="../assets/themes/documenter-light.css" data-theme-name="documenter-light" data-theme-primary/><script src="../assets/themeswap.js"></script></head><body><div id="documenter"><nav class="docs-sidebar"><a class="docs-logo" href="../"><img src="../assets/logo.png" alt="Gnuplot.jl logo"/></a><div class="docs-package-name"><span class="docs-autofit">Gnuplot.jl</span></div><form class="docs-search" action="../search/"><input class="docs-search-query" id="documenter-search-query" name="q" type="text" placeholder="Search docs"/></form><ul class="docs-menu"><li><a class="tocitem" href="../">Home</a></li><li><a class="tocitem" href="../install/">Installation</a></li><li><a class="tocitem" href="../basic/">Basic usage</a></li><li class="is-active"><a class="tocitem" href>Advanced techniques</a><ul class="internal"><li><a class="tocitem" href="#Named-datasets-1"><span>Named datasets</span></a></li><li><a class="tocitem" href="#Multiplot-1"><span>Multiplot</span></a></li><li><a class="tocitem" href="#Multiple-sessions-1"><span>Multiple sessions</span></a></li><li><a class="tocitem" href="#Histograms-(1D)-1"><span>Histograms (1D)</span></a></li><li><a class="tocitem" href="#Histograms-(2D)-1"><span>Histograms (2D)</span></a></li><li><a class="tocitem" href="#Contour-lines-1"><span>Contour lines</span></a></li><li><a class="tocitem" href="#Animations-1"><span>Animations</span></a></li><li><a class="tocitem" href="#Dry-sessions-1"><span>Dry sessions</span></a></li><li><a class="tocitem" href="#Options-1"><span>Options</span></a></li></ul></li><li><a class="tocitem" href="../tips/">Tips</a></li><li><a class="tocitem" href="../examples/">Examples</a></li><li><a class="tocitem" href="../api/">API</a></li></ul><div class="docs-version-selector field has-addons"><div class="control"><span class="docs-label button is-static is-size-7">Version</span></div><div class="docs-selector control is-expanded"><div class="select is-fullwidth is-size-7"><select id="documenter-version-selector"></select></div></div></div></nav><div class="docs-main"><header class="docs-navbar"><nav class="breadcrumb"><ul class="is-hidden-mobile"><li class="is-active"><a href>Advanced techniques</a></li></ul><ul class="is-hidden-tablet"><li class="is-active"><a href>Advanced techniques</a></li></ul></nav><div class="docs-right"><a class="docs-edit-link" href="https://github.com/gcalderone/Gnuplot.jl/blob/master/docs/src/advanced.md" title="Edit on GitHub"><span class="docs-icon fab"></span><span class="docs-label is-hidden-touch">Edit on GitHub</span></a><a class="docs-settings-button fas fa-cog" id="documenter-settings-button" href="#" title="Settings"></a><a class="docs-sidebar-button fa fa-bars is-hidden-desktop" id="documenter-sidebar-button" href="#"></a></div></header><article class="content" id="documenter-page"><h1 id="Advanced-techniques-1"><a class="docs-heading-anchor" href="#Advanced-techniques-1">Advanced techniques</a><a class="docs-heading-anchor-permalink" href="#Advanced-techniques-1" title="Permalink"></a></h1><p>Here we will show a few advanced techniques for data visualization using <strong>Gnuplot.jl</strong>.</p><h2 id="Named-datasets-1"><a class="docs-heading-anchor" href="#Named-datasets-1">Named datasets</a><a class="docs-heading-anchor-permalink" href="#Named-datasets-1" title="Permalink"></a></h2><p>A dataset may have an associated name whose purpose is to use it multiple times for plotting, while sending it only once to gnuplot. A dataset name must begin with a <code>$</code>.</p><p>A named dataset is defined as a <code>Pair{String, Tuple}</code>, e.g.:</p><pre><code class="language-julia">&quot;\$name&quot; =&gt; (1:10,)</code></pre><p>and can be used as an argument to both <code>@gp</code> and <code>gsp</code>, e.g.:</p><pre><code class="language-julia">x = range(-2pi, stop=2pi, length=100);
y = sin.(x)
name = &quot;\$MyDataSet1&quot;
@gp name=&gt;(x, y) &quot;plot $name w l lc rgb &#39;black&#39;&quot; &quot;pl $name u 1:(-1.5*\$2) w l lc rgb &#39;red&#39;&quot;</code></pre><p><img src="../assets/ex010.png" alt/></p><p>Both curves use the same input data, but the red curve has the second column (<code>\$2</code>, corresponding to the <em>y</em> value) is multiplied by a factor -1.5.</p><p>A named dataset comes in hand also when using gnuplot to fit experimental data to a model, e.g.:</p><pre><code class="language-julia"># Generate data and some noise to simulate measurements
x = range(-2pi, stop=2pi, length=20);
y = 1.5 * sin.(0.3 .+ 0.7x);
err = 0.1 * maximum(abs.(y)) .* fill(1, size(x));
y += err .* randn(length(x));
name = &quot;\$MyDataSet1&quot;
@gp &quot;f(x) = a * sin(b + c*x)&quot; :- # define an analytical model
@gp :- &quot;a=1&quot; &quot;b=1&quot; &quot;c=1&quot; :- # set parameter initial values
@gp :- name=&gt;(x, y, err) :- # define a named dataset
@gp :- &quot;fit f(x) $name via a, b, c;&quot; # fit the data</code></pre><p>The parameter best fit values can be retrieved as follows:</p><pre><code class="language-julia">@info(&quot;Best fit values:&quot;,
a=Gnuplot.exec(&quot;print a&quot;),
b=Gnuplot.exec(&quot;print b&quot;),
c=Gnuplot.exec(&quot;print c&quot;))</code></pre><pre><code class="language-none">┌ Info: Best fit values:
│ a = &quot;1.53999342784748&quot;
│ b = &quot;0.312000243313806&quot;
└ c = &quot;0.71603533340826&quot;</code></pre><p>A named dataset is available until the session is reset, i.e. as long as <code>:-</code> is used as first argument to <code>@gp</code>.</p><h2 id="Multiplot-1"><a class="docs-heading-anchor" href="#Multiplot-1">Multiplot</a><a class="docs-heading-anchor-permalink" href="#Multiplot-1" title="Permalink"></a></h2><p><strong>Gnuplot.jl</strong> can draw multiple plots in the same figure by exploiting the <code>multiplot</code> command. Each plot is identified by a positive integer number, which can be used as argument to <code>@gp</code> to redirect commands to the appropriate plot.</p><p>Continuing previous example we can plot both data and best fit model (in plot <code>1</code>) and residuals (in plot <code>2</code>):</p><pre><code class="language-julia">@gp :- &quot;set multiplot layout 2,1&quot;
@gp :- 1 &quot;p $name w errorbars t &#39;Data&#39;&quot;
@gp :- &quot;p $name u 1:(f(\$1)) w l t &#39;Best fit model&#39;&quot;
@gp :- 2 &quot;p $name u 1:((f(\$1)-\$2) / \$3):(1) w errorbars t &#39;Resid. [{/Symbol s}]&#39;&quot;
@gp :- [extrema(x)...] [0,0] &quot;w l notit dt 2 lc rgb &#39;black&#39;&quot; # reference line</code></pre><p><img src="../assets/ex011.png" alt/></p><p>Note that the order of the plots is not relevant, i.e. we would get the same results with:</p><pre><code class="language-julia">@gp :- &quot;set multiplot layout 2,1&quot;
@gp :- 2 &quot;p $name u 1:((f(\$1)-\$2) / \$3):(1) w errorbars t &#39;Resid. [{/Symbol s}]&#39;&quot;
@gp :- [extrema(x)...] [0,0] &quot;w l notit dt 2 lc rgb &#39;black&#39;&quot; # reference line
@gp :- 1 &quot;p $name w errorbars t &#39;Data&#39;&quot;
@gp :- &quot;p $name u 1:(f(\$1)) w l t &#39;Best fit model&#39;&quot;</code></pre><h3 id="Mixing-2D-and-3D-plots-1"><a class="docs-heading-anchor" href="#Mixing-2D-and-3D-plots-1">Mixing 2D and 3D plots</a><a class="docs-heading-anchor-permalink" href="#Mixing-2D-and-3D-plots-1" title="Permalink"></a></h3><p>A multiplot can also mix 2D and 3D plots:</p><pre><code class="language-julia">x = y = -10:0.33:10
@gp &quot;set multiplot layout 1,2&quot;
# 2D
@gp :- 1 x sin.(x) ./ x &quot;w l notit&quot;
# 3D
sinc2d(x,y) = sin.(sqrt.(x.^2 + y.^2))./sqrt.(x.^2+y.^2)
fxy = [sinc2d(x,y) for x in x, y in y]
@gsp :- 2 x y fxy &quot;w pm3d notit&quot;</code></pre><p><img src="../assets/ex012.png" alt/></p><h2 id="Multiple-sessions-1"><a class="docs-heading-anchor" href="#Multiple-sessions-1">Multiple sessions</a><a class="docs-heading-anchor-permalink" href="#Multiple-sessions-1" title="Permalink"></a></h2><p><strong>Gnuplot.jl</strong> can handle multiple sessions, i.e. multiple gnuplot processes running simultaneously. Each session is identified by a symbol.</p><p>In order to redirect commands to a specific session simply insert a symbol into your <code>@gp</code> or <code>@gsp</code> call, e.g.:</p><pre><code class="language-julia">@gp :GP1 &quot;plot sin(x)&quot; # opens first window
@gp :GP2 &quot;plot sin(x)&quot; # opens secondo window
@gp :- :GP1 &quot;plot cos(x)&quot; # add a plot on first window</code></pre><p>If the session ID is not specified the <code>:default</code> session is considered.</p><p>The names of all current sessions can be retrieved with <a href="../api/#Gnuplot.session_names"><code>session_names()</code></a>:</p><pre><code class="language-julia-repl">julia&gt; println(session_names())
Symbol[:GP1, :default, :GP2]</code></pre><p>To quit a specific session use <a href="../api/#Gnuplot.quit"><code>Gnuplot.quit()</code></a>:</p><pre><code class="language-julia-repl">julia&gt; Gnuplot.quit(:GP1)
0</code></pre><p>The output value is the exit status of the underlying gnuplot process.</p><p>You may also quit all active sessions at once with <a href="../api/#Gnuplot.quitall"><code>Gnuplot.quitall()</code></a>:</p><pre><code class="language-julia-repl">julia&gt; Gnuplot.quitall()</code></pre><h2 id="Histograms-(1D)-1"><a class="docs-heading-anchor" href="#Histograms-(1D)-1">Histograms (1D)</a><a class="docs-heading-anchor-permalink" href="#Histograms-(1D)-1" title="Permalink"></a></h2><h2 id="Histograms-(2D)-1"><a class="docs-heading-anchor" href="#Histograms-(2D)-1">Histograms (2D)</a><a class="docs-heading-anchor-permalink" href="#Histograms-(2D)-1" title="Permalink"></a></h2><h2 id="Contour-lines-1"><a class="docs-heading-anchor" href="#Contour-lines-1">Contour lines</a><a class="docs-heading-anchor-permalink" href="#Contour-lines-1" title="Permalink"></a></h2><h2 id="Animations-1"><a class="docs-heading-anchor" href="#Animations-1">Animations</a><a class="docs-heading-anchor-permalink" href="#Animations-1" title="Permalink"></a></h2><h2 id="Dry-sessions-1"><a class="docs-heading-anchor" href="#Dry-sessions-1">Dry sessions</a><a class="docs-heading-anchor-permalink" href="#Dry-sessions-1" title="Permalink"></a></h2><h2 id="Options-1"><a class="docs-heading-anchor" href="#Options-1">Options</a><a class="docs-heading-anchor-permalink" href="#Options-1" title="Permalink"></a></h2></article><nav class="docs-footer"><a class="docs-footer-prevpage" href="../basic/">« Basic usage</a><a class="docs-footer-nextpage" href="../tips/">Tips »</a></nav></div><div class="modal" id="documenter-settings"><div class="modal-background"></div><div class="modal-card"><header class="modal-card-head"><p class="modal-card-title">Settings</p><button class="delete"></button></header><section class="modal-card-body"><p><label class="label">Theme</label><div class="select"><select id="documenter-themepicker"><option value="documenter-light">documenter-light</option><option value="documenter-dark">documenter-dark</option></select></div></p><hr/><p>This document was generated with <a href="https://github.com/JuliaDocs/Documenter.jl">Documenter.jl</a> on <span class="colophon-date" title="Tuesday 31 March 2020 02:08">Tuesday 31 March 2020</span>. Using Julia version 1.3.1.</p></section><footer class="modal-card-foot"></footer></div></div></div></body></html>