Re: Il disegno programmato nell’Arte di scrivere con LaTeX

#72642
lorenzo.pantieri
Partecipante
    Up
    0
    Down
    ::


    Ciao a tutti.

    Tanto per cominciare devo delle scuse a tutti i sostenitori del disegno programmato con LaTeX: avevate ragione, è uno strumento semplicemente meraviglioso, la prossima versione dell’Arte colmerà questa vistosa lacuna, di cui sono il solo responsabile. Come la colmeremo, è da vedere: o ce la caveremo con una menzione dei pacchetti principali, oppure (come ritengo più opportuno) con un bel capitolo introduttivo.

    Sto studiando il pacchetto pgfplots (è il mio inizio, nel mare magnum del disegno programmato, abbiate pazienza), e comincio a capirci qualcosa. Ho anche molti dubbi, ma sono sicuro che qui sul forum otterrò le risposte che cerco. Tutte le vostre indicazioni mi permetteranno di scrivere un articolo “L’arte di fare disegni con pgfplots”, che è ancora in bozza. Se riuscirò a portare a termine l’articolo, sarà solo merito vostro. L’articolo potrebbe essere parte del capitolo sul disegno programmato con LaTeX da mettere nella nuova edizione dell’Arte.

    1.
    Disegnare grafici di funzioni scrivendo istruzioni, dunque. Non c’è nulla di strano, anche con Mathematica (cui ero abituato) si fa così: il linguaggio di pgfplots è un po’ diverso, ma non più difficile. I grafici prodotti da pgfplots sono, semplicemente, magnifici, con in più il vantaggio di averli tipograficamente coerenti col resto del documento. Gli inconvenienti principali che ho trovato “facendo fare i calcoli e i grafici a LaTeX” sono la lentezza in fase di compilazione, e la possibilità, tutt’altro che remota, di avere degli errori (fatali) di sforamento della memoria:
    `
    TeX capacity exceeded, sorry
    Fatal error occurred, no output PDF file produced!
    `
    Questi errori possono presentarsi anche in un documento di dimensioni relativamente modeste: l’articolo che sto scrivendo, per esempio, contiene una ventina di grafici ad alta risoluzione, e venti grafici sono pochini. Lo sforamento, il più delle volte, si ha se si spinge troppo sul pedale “samples”. Queste cose si giustificano, io credo, col fatto che “stiamo facendo fare i conti a TeX”, che di suo farebbe un mestiere diverso. Tuttavia, come qualcuno ha già detto, il problema si risolve “facendo fare i grafici a LaTeX e i calcoli da qualcun altro”. Per esempio, si possono fare i calcoli con Mathematica, esportare i risultati non come grafici ma come file di dati (coppie o terne ordinate, ovvero i punti del grafico) e usare il comando di pgfplots
    `
    addplot […] file {dati.txt};
    `
    per produrre il grafico. Questa strada (certo meno comoda di usare comandi tutti interni a LaTeX) è di fatto obbligata se si scrive un documento di grandi dimensioni. Ho capito bene?

    2.
    Prendiamo questa curva di Lissajous:
    `
    \begin{tikzpicture}
    \begin{axis}
    \addplot [
    color=blue,
    style=thick,
    samples=50,
    smooth,
    domain=0:360,
    variable=\t
    ]
    ({sin(3*t)}, {sin(2*t)});
    \end{axis}
    \end{tikzpicture}
    `
    L’opzione smooth è praticamente obbligatoria, se si vuole un risultato decente. L’alternativa è aumentare a dismisura il numero dei punti di campionamento
    `
    samples=100,
    `
    con tutti gli svantaggi in termini di tempo e di occupazione di memoria che dicevo. Questo capita praticamente sempre: per avere un grafico di qualità o si usa “smooth” con “samples” (ragionevolmente) basso, oppure se si rinuncia a “smooth” tocca aumentare molto “samples”. Dico bene?

    3.
    Qual è il valore predefinito di “samples”?

    4.
    Esiste un analogo di “smooth” per i grafici tridimensionali?

    5.
    Perché sin e cos vogliono il loro argomento in gradi? Di solito nei grafici tecnico-scientifici è il radiante che la fa da padrone. Con pgfplots, invece, tocca scrivere ogni volta sin(deg(x)), un pelino scomodo.

    6.
    Perché l’opzione “no marks” non è predefinita? In fondo, nei documenti tecnico-scientifici le funzioni sono più frequentemente rappresentate con curve e superfici “lisce” invece che per punti. Perché “thick,blue” implica “no marks”?

    7.
    Perché l’etichetta prodotta con “ylabel” è ruotata e centrata? Io l’avevo sempre vista in alto, dritta.

    8.
    Un’elica cilindrica:
    `
    \begin{tikzpicture}
    \begin{axis}[
    view={60}{20},
    xlabel=$x$,
    ylabel=$y$,
    zlabel=$z$,
    variable=\t
    ]
    \addplot3 [
    color=blue,
    style=thick,
    domain=0:5.5*pi,
    samples=40,
    smooth,
    samples y=0,
    no marks
    ]
    ({sin(deg(t))}, {cos(deg(t))},
    {2*t/(5*pi)});
    \end{axis}
    \end{tikzpicture}
    `
    La doc. dice che “si è usato samples y=0 per indicare che deve essere campionata una linea invece di una matrice”. Che vuol dire? È importante: se si toglie quella riga il grafico non viene prodotto!

    9.
    Non ho capito la chiave view. In
    `
    view={60}{20},
    `
    che cosa rappresentano 60 e 20?

    10.
    Una superficie semisferica in forma parametrica:
    `
    \begin{tikzpicture}
    \begin{axis}[view={60}{30}]
    \addplot3 [
    surf,
    z buffer=sort,
    samples=30,
    variable=\u,
    variable y=\v,
    domain=-1:0,
    y domain=0:2*pi
    ]
    ({sqrt(1-u^2)*cos(deg(v))},
    {sqrt(1-u^2)*sin(deg(v))},
    u);
    \end{axis}
    \end{tikzpicture}
    `
    Non ho capito la ragione di quel “z buffer=sort” (peraltro necessario, come sopra: se lo si toglie il grafico non viene). Ah, il codice che ho scritto è corretto? Nelle mie intenzioni, u e v parametrizzano la superficie.

    11.
    Voglio fare il grafico della Gamma di Eulero da -5 a 5 usando Mathematica per fare i calcoli e pgfplots per fare il disegno. L’idea di campionare la Gamma con
    `
    out = Table[{x, Gamma[x]}, {x, -5, 5, 0.1}];
    `
    di esportare i punti in un file con
    `
    Export[“gamma”, out, “Table”];
    `
    da dare in pasto a pgfplots non funziona: evidentemente, a pgfplots risulta indigesto il modo con cui Mathematica esprime le disontinuiità. Come risolvo il problema?

    12.
    Un grafico dato per punti:
    `
    \begin{tikzpicture}
    \begin{axis}
    \addplot coordinates {
    (10,100)
    (20,150)
    (40,225)
    (80,340)
    (160,510)
    (320,765)
    (640,1150)
    };
    \end{axis}
    \end{tikzpicture}
    `
    Visto quel “1,000” (con la virgola come separatore)? Perché lo scrive così? Come si fa per avere “1000” scritto senza quella virgola?

    Grazie
    Lorenzo

    Go to top