Gnuplot e tikz

  • Creatore
    Topic
  • #20773
    Up
    0
    Down
    ::


    Salve a tutti.

    Per chi volesse provare a costruire grafici con Gnuplot ed allo stesso tempo
    sfruttare la potenza e semplicità del pacchetto tikz, segnalo questo link:
    http://peter.affenbande.org/gnuplot/

    L’autore, Peter Hedwig, ha creato un terminale che permette di esportare
    i grafici da Gnuplot ad un ambiente tikzpicture.
    Chi usa abitualmente Gnuplot può trovare utile la possibilità di aggiungere annotazioni
    e legende in fase successiva all’esportazione del grafico, grazie a tikz.
    Gli esempi forniti nel sito sono molto chiari.

    Segnalo, tra le altre cose, la possibilità di definire dei “nodi” con il linguaggio di
    scripting di Gnuplot, i quali verranno messi a disposizione nell’ambiente tikzpicture
    a valle dell’esportazione. Ciò facilita moltissimo il lavoro con tikz.

    Il terminale tikz è stato sviluppato in Lua, pertanto è stato necessario ricompilare
    Gnuplot (ver. 4.2). Tutto quello che serve, sia per Linux che per Windows si scarica
    dal sito.

    Per un tutorial chiaro e completo sull’argomento segnalo inoltre il sito:
    http://www.fauskes.net/pgftikzexamples/gnuplot-tikz-terminal/
    mantenuto da Kjell Magne Fauske.

    Buon disegno,
    Agostino

Visualizzazione 2 filoni di risposte
  • Autore
    Risposte
    • #20774
      Up
      0
      Down
      ::


      Aggiungo un mio esempio:

      Le curve, gli assi e le etichette degli assi sono ottenuti con il seguente script Gnuplot:
      `
      set terminal lua solid nopicenvironment originreset plotsize 11cm,6.5cm
      set output 'Mach_Cl.tex'
      set datafile separator “,”
      set format x “%3.1f”
      set format y “%3.1f”
      set key at graph 0.78, graph 0.17
      set ytics offset 1,0
      set xtics offset 0,0.5
      set border lw 2
      set xrange [ 0 : 2 ] noreverse nowriteback
      set xlabel '\relsize{1}$\text{\sf M}_{\infty}$' \
      offset graph 0.445, graph 0.07
      set yrange [ 0.0 : 3 ] noreverse nowriteback
      set ylabel \
      '\tikz[baseline]{\node at (0,0) rotate=-90]{\relsize{0}$\displaystyle \frac{C_{\ell}}{\,\,C_{\ell}\big|_{\text{\sf M}_{\infty}=0}\,}$};}' \
      offset graph -0.010, graph 0.42

      # this sets tikz nodes for later reference
      set label “” at 0,0 font “,gp refnode,name=nM00a”
      set label “” at 0,0.5 font “,gp refnode,name=nM00b”
      set label “” at 0,0.7 font “,gp refnode,name=nM00c”
      set label “” at 1,0 font “,gp refnode,name=nM10a”
      set label “” at 1,0.5 font “,gp refnode,name=nM10b”
      set label “” at 1,0.7 font “,gp refnode,name=nM10c”
      set label “” at 1,3.0 font “,gp refnode,name=nM10d”
      set label “” at 0.8,0 font “,gp refnode,name=nM08a”
      set label “” at 0.8,0.5 font “,gp refnode,name=nM08b”
      set label “” at 0.8,0.7 font “,gp refnode,name=nM08c”
      set label “” at 1.2,0 font “,gp refnode,name=nM12a”
      set label “” at 1.2,0.5 font “,gp refnode,name=nM12b”
      set label “” at 1.2,0.25 font “,gp refnode,name=nM12bm”
      set label “” at 1.2,0.7 font “,gp refnode,name=nM12c”
      set label “” at 1.9,0 font “,gp refnode,name=nM20a”
      set label “” at 1.9,0.5 font “,gp refnode,name=nM20b”
      set label “” at 1.9,0.25 font “,gp refnode,name=nM20bm”
      set label “” at 1.9,0.7 font “,gp refnode,name=nM20c”

      set label “” at 0.83,1.7 font “,gp refnode,name=nP1”
      set label “” at 1.3,0.9 font “,gp refnode,name=nP2”

      ClSub(x)=1/sqrt(1.-x**2)
      ClSup(x)=1/sqrt(x**2 – 1.) – 0.2

      set yzeroaxis
      set samples 150, 150
      plot \
      ClSub(x) with lines lw 3 lt 2, \
      ClSup(x) with lines lw 3 lt 2, \
      'Mach_Cl_c.csv' using 1:2:(30000.) smooth acsplines with lines lw 3 lt 1
      `

      Il file di dati letto da questo script è qui:
      http://wpage.unina.it/agodemar/temp/Mach_Cl_c.csv.

      Successivamente, il file Mach_Cl.tex, creato da Gnuplot, è stato richiamato dal seguente sorgente LaTeX:

      `
      \documentclass[10pt]{article}
      \usepackage[T1]{fontenc}
      \usepackage{textcomp}
      \usepackage[latin1]{inputenc}
      \usepackage{gnuplot-lua-tikz}
      \usepackage{relsize}

      % #1 plot number — multiplots are numbered from 1 to n, a single plot is allways number 1)
      % #2 point name — name the point to reference it later
      % #3 rel. x pos — relative x position between 0 and 1
      % #4 rel. y pos — relative y position between 0 and 1
      \newdimen\gptmpdimx
      \newdimen\gptmpdimy
      \newcommand{\gpsetplotcoord}[4]{%
      \pgfextractx{\gptmpdimx}{%
      \pgfpointlineattime{#3}%
      {\pgfpointanchor{gpbb south west #1}{center}}%
      {\pgfpointanchor{gpbb south east #1}{center}}}%
      \pgfextracty{\gptmpdimy}{%
      \pgfpointlineattime{#4}%
      {\pgfpointanchor{gpbb south west #1}{center}}%
      {\pgfpointanchor{gpbb north west #1}{center}}}%
      \coordinate (#2) at (\gptmpdimx,\gptmpdimy);%
      }
      %%
      %% e.g. \gplegendline{gp_lt_color1}{gp_lt_plot1}
      %%
      \newcommand{\gplegendline}[2]{%
      \tikz[gnuplot,baseline,yshift=.6ex]{\draw[#1,#2](0,0)–(.6,0);}%
      }
      %%
      %% e.g. \gplegendmark{gp_lt_color0}{gp_mark1}
      %%
      \newcommand{\gplegendmark}[2]{%
      \tikz[gnuplot,baseline,yshift=.6ex]{\color{#1}\gppoint{#2}{(0,0)}}%
      }
      %%
      %% e.g. “time / t \quad\gplabelarrow”
      %%
      \newcommand{\gplabelarrow}{%
      \tikz[baseline]{\draw[yshift=.7ex,->](0,0)–(.7,0);}%
      }

      \definecolor{mydarkgreen}{rgb}{0.03,0.47,0.03}
      \definecolor{mydarkblue}{rgb}{0.07,0.08,0.4}

      \begin{document}

      \begin{tikzpicture}[gnuplot]

      \renewcommand{\gpsolidlines}{} % “disable” \gpsolidlines
      \gpdashedlines

      % change the color of default gnuplot line types
      \colorlet{gp_lt_color0}{mydarkblue}%
      \colorlet{gp_lt_color1}{mydarkgreen}%
      %%
      %% change font size
      %%
      %\tikzstyle{every node}=+[font=\relsize{1}]

      %%
      %% customize line types
      %%
      %\tikzstyle{gp_lt_plot0} = [loosely dotted]%
      %\tikzstyle{gp_lt_plot1} = [loosely dashed]%
      %\tikzstyle{gp_lt_plot1} = [dashed]%

      %% include plot file

      \input{Mach_Cl.tex}

      %%
      %% draw legend
      %%

      \node[draw=none,right=0pt,anchor=south west,xshift=8cm,yshift=5.0cm,rounded corners=0.5ex,fill=white] at (gpbb south west 1) {%
      \tikz{%
      \node[anchor=east,inner sep=0pt,yshift=0\baselineskip]%
      {\relsize{1}teorico\ \gplegendline{gp_lt_color1}{gp_lt_plot1, very thick}};
      \node[anchor=east,inner sep=0pt,yshift=-1.3\baselineskip]%
      {\relsize{1}sperimentale\ \gplegendline{gp_lt_color0}{gp_lt_plot0, very thick}};
      }
      };

      %%
      %% draw the rest
      %%

      \draw[draw=none,pattern=dots,pattern color=mylightblue,fill opacity=0.8] (nM08a) — (nM12a) — (nM12c) — (nM08c) — cycle;
      \draw[draw=none,pattern=dots,pattern color=mydarkgreen!50,fill opacity=0.8] (nM00a) — (nM08a) — (nM08c) — (nM00c) — cycle;
      \draw[draw=none,pattern=dots,pattern color=orange!70,fill opacity=0.8] (nM12a) — (nM20a) — (nM20bm) — (nM12bm) — cycle;
      \draw[dashed,mydarkblue] (nM10a) — (nM10d);
      \draw[solid,very thick,mydarkblue,arrows=<->] (nM00b) — node [pos=0.5,fill=white,inner sep=0.4ex]{subsonico} (nM08b);
      \draw[solid,very thick,mydarkblue,arrows=<->] (nM08b) — node [pos=0.5,fill=white,inner sep=0.4ex]{transonico} (nM12b);
      \draw[solid,very thick,mydarkblue,arrows=<->] (nM12bm) — node [pos=0.5,fill=white,inner sep=0.4ex]{supersonico} (nM20bm);
      \draw[dashed,mydarkblue] (nM08a) — (nM08c);
      \draw[dashed,mydarkblue] (nM12a) — (nM12c);

      \node at (nP1) [node distance=0pt,%xshift=20pt,yshift=-5pt,%
      pin={[pin distance=1.0cm,pin edge={bend left,mydarkgreen!70,thick}]120:{%
      $\displaystyle\propto\frac{1}{\sqrt{1-\text{\sf M}_{\infty}}}$}%
      }%
      ]{};

      \node at (nP2) [node distance=0pt,%xshift=20pt,yshift=-5pt,%
      pin={[pin distance=1.2cm,pin edge={bend left,mydarkgreen!70,thick}]40:{%
      $\displaystyle\propto\frac{1}{\sqrt{\text{\sf M}_{\infty}-1}}$}%
      }%
      ]{};
      \end{tikzpicture}
      \end{document}
      `

      Buon disegno,
      Agostino

    • #20775
      Up
      0
      Down
      ::


      Che spettacolo! Grazie per la segnalazione.

      Daniele

    • #20776
      Up
      0
      Down
      ::


      Ottima segnalazione! Grazie!

Visualizzazione 2 filoni di risposte
  • Devi essere connesso per rispondere a questo topic.

Go to top