Risposte nei forum create
-
AutoreRisposte
-
6 Maggio 2012 alle 17:15 in risposta a: Il disegno programmato nell’Arte di scrivere con LaTeX #726954 Maggio 2012 alle 15:22 in risposta a: Il disegno programmato nell’Arte di scrivere con LaTeX #72692::
Liverpool” post=72344 @Lorenzo: hai letto le osservazioni sulla differenza tra asse orizzontale e asse delle ascisse? C’è qualcun altro che vuole commentare?
Sì, le ho lette e concordo con te.
Riguardo ai difett(ucc)i di TikZ: buono a sapersi, ma, ripeto, è Davide contro Golia: chi ha scritto quel pacchetto l’ha fatto gratis, e dà filo da torcere a una multinazionale quotata in borsa che dà lavoro a decine di ingegneri del software. Cappello.
L.
3 Maggio 2012 alle 11:34 in risposta a: Il disegno programmato nell’Arte di scrivere con LaTeX #72686::
Sono sollevato: non sono il solo a trovare innaturale quella scelta!Liverpool” post=72291In quel caso direi che i valori bottom e top impongono il passaggio dell’asse orizzontale [nota: non lo chiamerei né asse x, né asse delle ascisse] per y=ymin e y=ymax rispettivamente; il valore center o middle ne impone il passaggio per l’origine se il grafico taglia l’asse delle ascisse, altrimenti coincide con il valore bottom o top a seconda che il grafico sia interamente al di sopra o al di sotto di esso rispettivamente.
Mi sono accorto di non sapere bene che signfica “origine” di un sistema di riferimento! Io l’avevo sempre interpretato come “punto d’intersezione degli assi”, ma se è così è ovvio che entrambi gli assi passano sempre per l’origine. Tu invece, mi pare, intendi origine come “punto dell’asse verticale di ordinata y=0”. Mi sbaglio? Se è così, penso che, per evitare ambiguità, la frase andrebbe resa così:
I valori bottom e top impongono il passaggio dell’asse delle ascisse per y=ymin e y=ymax rispettivamente; il valore center o middle ne impone il passaggio per il punto dell’asse verticale di ordinata y=0 se il grafico taglia l’asse delle ascisse, altrimenti coincide con il valore bottom o top a seconda che il grafico sia interamente al di sopra o al di sotto di esso rispettivamente.
Ah, perché preferisci “asse orizzontale” ad “asse delle ascisse”? Io preferisco “asse delle ascisse” e trovo “orizzontale” e “verticale” poco felici: se giri di un angolo retto il foglio il nome “orizzontale” e “verticale” è fuorviante. Ma è solo una questione di gusto. Che dici?
Ciao
L.
3 Maggio 2012 alle 11:12 in risposta a: Il disegno programmato nell’Arte di scrivere con LaTeX #72684::Liverpool” post=72287Secondo me si tratta di un vero e proprio errore di programmazione molto grave […]. Un altro aspetto che è stato totalmente ignorato dall’autore del pacchetto è la possibilità di produrre proiezioni prospettiche, opzione disponibile sia in Mathematica sia in Matlab, che sono i due software che stiamo usando maggiormente per il confronto. Spero che la lacuna venga colmata al più presto.
Ti chiedo di far presente la cosa all’autore del pacchetto: è importante, confido che correggerà gli errori e integrerà le funzioni di cui parli. In effetti, siamo molto esigenti con lui! Mathematica è in giro dal 1988 (in informatica equivale a un’era geologica), pgfplots da quando? Due anni? Mathematica costa migliaia di euro, pgfplots è gratis. Mathematica (tiro a indovinare) è sviluppato da decine di programmatori professionisti, pgfplots da pochi volontari. Insomma, Davide contro Golia. Eppure pgfplots regge alla grande il confronto! E siamo solo all’inizio!
Ah, vorrei che tu ci cimentassi nell’impresa di correggermi la frase su “middle” che ho riportato nel precedente intervento: non sono sicuro che vada bene.
robitex* Un opzione data globalmente vale in ogni elemento (\pgfplotsset).
* Posso dare un valore diverso per un insieme di elementi (opzione ad axis).
* Per ogni elemento posso modificare localmente il valore dell’opzione (opzione a \addplot).Giusto. Ma vorrei sapere con precisione quali valori possono essere dati ad axis e quali no. Tutti quelli che si possono dare a \addplot? O solo alcuni?
Grazie,
L.
3 Maggio 2012 alle 9:34 in risposta a: Il disegno programmato nell’Arte di scrivere con LaTeX #72681::
1.robitex” post=72282lo trovo perfettamente coerente. Se tutte le funzioni devono essere rappresentate nello stesso dominio…
Anch’io la penso così. In quali altri casi è giustificata una prassi del genere? Ovvero, dare in pasto ad axis opzioni che “andrebbero” date a \addplot?
2.
Resta il problema di “middle”.Scegliendo “bottom” l’asse delle x sarà disegnato passante per y=ymin, con “middle” l’asse passerà per y=0, con “top” l’asse passerà per y=ymax. Questo purché 0 faccia parte dell’asse delle ordinate: in caso contrario, l’asse x verrà disegnato passante per il punto di ordinata “più vicina” a zero.
Questa frase va bene? Come può essere migliorata?
Grazie,
L.
3 Maggio 2012 alle 8:04 in risposta a: Il disegno programmato nell’Arte di scrivere con LaTeX #72679::
Un’altra domanda. Ho bisogno di inserire tre grafici di funzione nello stesso riferimento. Il dominio dei tre grafici è lo stesso.
`\begin{tikzpicture}
\begin{axis}[domain=-6*pi:6*pi]
\addplot [
samples=200,
thick,
color=blue
]
{x*sin(deg(x))};
\addplot [dashed] {x};
\addplot [dashed] {-x};
\end{axis}
\end{tikzpicture}`
Questo codice funziona, ma è “logicamente” corretto? Voglio dire, di regola do la chiave “domain” nelle opzioni di \addplot, non di axis: infatti il dominio di una funzione mi pare che abbia a che vedere più col suo grafico che con il riferimento in cui è rappresentato.Però qui mi sembra giusto fare così: l’opzione “domain=-6*pi:6*pi” viene passata ai tre \addplot , così il codice è più trasparente. È sempre così? Voglio dire, posso dare qualunque opzione di \addplot indifferentemente anche come opzione di axis?
Grazie,
L.
3 Maggio 2012 alle 7:58 in risposta a: Il disegno programmato nell’Arte di scrivere con LaTeX #72678::illinguista1972″ post=72274Ma non mi dire che il più irriducibile nemico del disegno programmato in LaTeX ora ne sta diventando un virtuoso sopraffino! 😀
Si vede che che sono rimasto folgorato sulla via di Damasco… 😉
Scherzi a parte: non sono un virtuoso di pgfplots, ma ne sono un ammiratore entusiasta, lo sto imparando poco a poco, con gusto.
Nonostante sia un fan di pgfplots, sul disegno programmato tout court ho ancora qualche riserva. In questi giorni che sto studiando la cosa con occhi nuovi, sono rimasto sorpreso da quante siano le esigenze grafiche di un documento tecnico-sceintifico: il disegno di funzioni è una parte importante (capita abbastanza spesso di dover disegnare il grafico di una funzione), ma assolutamente minoritaria. Basta aprire un libro di Analisi I per rendersene conto…
Le esigenze grafiche sono di gran lunga superiori a quelle (diciamo) “testuali”. Se un documento come l’Arte mette in condizione l’utente di scrivere la parte testuale sua tesi, venendo incontro alla maggior parte delle esigenze più comune (sezionamento, indici, testatine, note, bibliografia, …), per soddisfare le esigenze grafiche di un utente “medio” sarebbe necessario un libro (meglio: un’enciclopedia) di migliaia di pagine. 🙁 (La cosa mi ricorda il confronto alfabeto/ideogrammi: gli ideogrammi sono infinitamente di più.) E affrontare la cosa con LaTeX può voler dire scrivere codice complicatissimo, fuori dalla portata dell’utente medio. Vedi l’esempio pluricitato dei maialini: l’utente “medio” potrebbe volere un grafico di quel tipo, ma il codice per produrlo è fuori dalla sua portata.
Insomma, il disegno programmato con LaTeX è uno strumento utilissimo: certe cose si possono fare con difficoltà analoga a quella impiegata per imparare altri programmi (fare un grafico di funzione con pgfplots non è più difficile che farlo con Mathematica; e se proprio si avesse bisogno di Mathematica, lo si può usare per fare i calcoli lasciando a pgfplots ll compito di fare il grafico); altre cose, invece, sono molto più difficili rispetto all’uso di un software dedicato. Altre volte (pensiamo a un progetto di un edificio), usare un software esterno è necessario. Questo mi sembra un approccio equilibrato alla questione: non si tratta di schierarsi pro o contro il disegno programmato: è uno strumento utilissimo, a volte può far comodo usarlo, altre volte no.
Di sicuro, la trasformazione della parte sulle figure nella prossima versione dell’Arte sarà un grosso cambiamento. 😉
Ciao,
L.
3 Maggio 2012 alle 4:55 in risposta a: Il disegno programmato nell’Arte di scrivere con LaTeX #72676::
1. La sfera. Ringrazio scaneco.ant per avermi segnalato la discussione. In breve, l’autore stesso dice che si tratta di un bug dell’opzione “axis equal=true”. L’opzione funziona bene nel piano, e permette di disegnare in modo impeccabile una circonferenza:
`\begin{tikzpicture}
\begin{axis}[axis equal=true]
\addplot [
domain=0:2*pi,
variable=\t,
samples=40,
smooth,
thick,
color=blue,
]
({cos(deg(t))},{sin(deg(t))});
\end{axis}
\end{tikzpicture}`
Ma in tre dimensioni non funziona più. Una piccola considerazione: si tratta di un bug abbastanza grave, che mostra come il pacchetto (splendido, peraltro) soffra ancora di qualche (inevitabile) difetto di gioventù.1. Su “middle”.
Scegliendo “bottom” l’asse delle x sarà disegnato passante per y=ymin, con “middle” l’asse passerà per y=0, con “top” l’asse passerà per y=ymax.
Questa frase (presente sul manuale di pgfplots) è vera purché 0 faccia parte dell’asse delle ordinate. In caso contrario, l’asse x verrà disegnato passante per il punto di ordinata “più vicina” a zero.
`[code]\begin{tikzpicture}
\begin{axis}[
xmin=1, xmax=5,
ymin=2, ymax=4,
axis x line=middle,
axis y line=middle
]
\end{axis}
\end{tikzpicture}`[/code]
Ho capito bene? C’è qualcuno che è in grado di riassumere il tutto in una frase corretta (più corretta di quella del manuale, dico)?Grazie mille,
L.
2 Maggio 2012 alle 17:51 in risposta a: Il disegno programmato nell’Arte di scrivere con LaTeX #72672::maumau” post=72262Il valore “middle” non fa altro che far passare l’asse per la coordinata 0 dell’altro asse. Se la coordinata 0 non fa parte del “dominio” dei punti dell’asse viene scelto il limite inferiore di questo “dominio”. In tutti i casi se selezioni un dominio per entrambi gli assi dove lo 0 sia compreso tra gli estremi del dominio, avrai che entrambi gli assi passeranno per l’origine.
Di conseguenza
`axis x line=middle (oppure center)`
fa si che l’asse x passi per la coordinata 0 dell’asse y. Nel caso in cui i valori sull’asse y vadano da 20 a 40, l’asse x passerà per il punto 20.
La chiave “axis line” invece vale per tutti e due gli assi, solamente che bisogna “guardarli” nel verso della freccia. In pratica sinistra e destra sono definiti per un osservatore che cammina lungo l’asse x muovendosi verso + infinito.Scusami, ma questa spiegazione mi risulta oscura… Colpa mia, sicuramente.
Grazie, comunque.
2 Maggio 2012 alle 15:48 in risposta a: Il disegno programmato nell’Arte di scrivere con LaTeX #72670::
Un’altra domanda. Mi seorprende il comportamento del valore “middle”.
`\documentclass{article}
\usepackage{pgfplots}
\begin{document}\begin{tikzpicture}
\begin{axis}[
axis x line=middle,
axis y line=left
]
\addplot [thick,blue] {x^2};
\end{axis}
\end{tikzpicture}\end{document}`
Come vedete, l’asse x non è “in mezzo”, come il nome suggerisce.Un altro esempio:
`\begin{tikzpicture}
\begin{axis}[
axis x line=bottom,
axis y line=middle
]
\addplot [
thick,
blue,
domain=0:2*pi
]
{sin(deg(x))};
\end{axis}
\end{tikzpicture}
`
Come vedete, questa volta è l’asse y a non essere al centro (è a sinistra).Questo è ancora più strano.
`\begin{tikzpicture}
\begin{axis}[
axis x line=middle,
axis y line=middle
]
\end{axis}
\end{tikzpicture}`
Come vedete, né l’asse x né l’asse y sono in mezzo: l’asse y è a destra, l’asse y è in basso.Sul manuale ho trovato che
The case center is a synonym for middle, both draw the line through the respective coordinate 0. If this coordinate is not part of the axis limit, the lower axis limit is chosen instead.
ma non ho proprio capito che significa. Da quel poco che ho capito, “middle” cerca di mettere l’asse al centro, ma se ciò dovesse creare la presenza di quadranti vuoti, allora l’asse x viene messo in basso e l’asse y viene messo a sinistra, se necessario. Ho detto bene? Questa cosa vorrei capirla per bene, ecco!
Un’altra cosa che non ho capito è questa (è tratta dal manuale di pgfplots, pagina 168):
`axis lines=box left middle center right none`
La chiave “axis line”, da quel che ho capito, imposta il formato di entrambi gli assi contemporaneamente. Che senso ha dire che entrambi gli assi devono essere messi a destra (“right”) o a sinistra (“left”)? A destra e a sinistra ci potrà andare l’asse y, non l’asse x!Ah, “middle” e “center” sono sinonimi, dunque?
Grazie,
L.
1 Maggio 2012 alle 7:01 in risposta a: Il disegno programmato nell’Arte di scrivere con LaTeX #72669::
Ancora ciao. Vorrei fare il grafico di una sfera. Se scrivo semplicmente
`\begin{tikzpicture}
\begin{axis}[title={Sfera.}]
\addplot3 [
surf,
z buffer=sort,
samples=30,
variable=\u,
variable y=\v,
domain=0:180,
y domain=0:360,
colormap/cool
]
({cos(u)*sin(v)},
{sin(u)*sin(v)},
{cos(v)});
\end{axis}
\end{tikzpicture}`
l”apparenza è quella di un ellissoide. Ovviamente, ciò dipende dal fatto che la tela predefinita è in formato rettangolare. Ho cercato di curare la cosa aggiungendo alle opzioni di axis
`width=6cm,
height=6cm
`
La situazione migliora, ma l’effetto di schiacciamento c’è sempre. Come risolvo?Grazie!
30 Aprile 2012 alle 13:51 in risposta a: Il disegno programmato nell’Arte di scrivere con LaTeX #72666::robitex” post=72163Il grafico è piccolo perché non ne imposti la dimensione della tela…
Certo, impostando le dimensioni della tela posso fare quello che voglio. Però neppure negli altri grafici due di quella pagina ho impostato le dimensioni della tela, eppure quei grafici sono un po’ più grandi. Mi chiedevo il motivo di questa differenza…
Liverpool” post=72165Comunque [tt]blue[/tt] equivale a [tt]color=blue[/tt] e [tt]smooth[/tt] e [tt]thick[/tt] sono chiavi senza valore (è scritto nel manuale).
Ottimo!
Grazie mille,
L.
30 Aprile 2012 alle 13:27 in risposta a: Il disegno programmato nell’Arte di scrivere con LaTeX #72663::Liverpool” post=721551) No. [tt]shader=interp[/tt] riguarda l’algoritmo di colorazione delle facce, non la forma e la quantità delle stesse. In altre parole, se ho solo 10 campioni per lato per il sombrero, con [tt]shader=interp[/tt] la cororazione la vedrò linearmente proporzionale alla quota, ma la forma la vedrò sempre piuttosto squadrata perché le facce sono poche. Tra l’altro l’interpolazione è lineare e non cubica. Però a volte l’effetto che dà il colore è maggiore di quello che dà la forma, perciò l’occhio si illude di vedere una superficie omogenea anche quando non lo è, solo perché se la aspetta.
Perfetto!
Liverpool” post=721552) e 3) [tt]thick[/tt] e [tt]smooth[/tt] sono entrambe chiavi, non opzioni (probabilmente le ho chiamate così perché di solito non faccio differenza). Se vedi nell’indice analitico trovi l’apposizione “key”. [tt]blue[/tt] è un’opzione che puoi dare alle chiavi [tt]draw[/tt], [tt]fill[/tt] o [tt]color[/tt], se vuoi colorare rispettivamente solo il tratto, solo il riempimento o entrambi.
Allora, vediamo di metterci d’accordo sulla terminologia. In questo codice
`\addplot`
“color” è la chiave, “blu” è il valore, “color=blue” è l’opzione. Di solito quando il valore di una chiave è “true”, questo si può sottointendere e scrivere soltanto la chiave. Nel comando \addplot, se do semplicemente “blue” questo equivale a “draw=blue”, “fill=blue” o a “color=blue”? E se “thick” e “smooth” sono chiavi, quali sono i loro valori?Liverpool” post=721554) Non hai seguito per filo e per segno le mie istruzioni 😡 , perché io ho parlato di [tt]unbounded coords[/tt] e ti ho anche spiegato la differenza tra le due opzioni. 😛 Perché dici che il grafico è più piccolo? A me sembra uguale. Forse perché una parte dello spazio la occupa il titolo…
Hai perfettamente ragione… scusami! 🙁 Ho rimediato, questo è il risultato:

Continuo a trovare il grafico più piccolo (e anche spostato un po’ a sinistra rispetto agli altri due), ma forse è solo una mia impressione…
Per robitex: ho letto l’articolo, ma cercavo qualcosa di un po’ più semplice per disegnare la gamma. Il metodo suggerito da Liverpool è decisamente facile: in definitiva, una volta generato il file con i dati, basta l’istruzione
`\addplot [unbounded coords=jump] {gamma.txt};`Grazie mille! 🙂
30 Aprile 2012 alle 10:49 in risposta a: Il disegno programmato nell’Arte di scrivere con LaTeX #72659::Liverpool” post=72127[…] con le curve di Bézier servono meno punti in più che con l’interpolazione lineare per ottenere generalmente buoni risultati con un modesto incremento della memoria. Se è così siamo d’accordo, tranne che per le obiezioni sollevate all’inizio […].
Sono d’accordo, vediamo un semplice esempio:
`\documentclass{article}
\usepackage{pgfplots}
\begin{document}
\begin{tikzpicture}
\begin{axis}
\addplot [
domain=0:360,
variable=\t,
% samples=200,
% samples=50,
% smooth,
color=blue,
style=thick,
]
({sin(7*t)}, {sin(2*t)});
\end{axis}
\end{tikzpicture}
\end{document}`
Se compilate questo documento così com’è, vedrete che la curva di Lissajous è resa in modo inaccettabile. Per avere un risultato decente, le strade sono due:
1. aumentare molto “samples”: “samples=50” non basta (provare per credere), occorre almeno “samples=200”;
2. usare “smooth” con “samples=50”.
Nel primo caso non si introduce alcuna ipotesi di regolarità sulla curva, ma occorre un numero di campioni molto elevato; nel secondo caso si introduce l’ipotesi di regolarità (che è vera, per la funzione in questione) e si ottiene un ottimo risultato anche senza spingere molto su “samples”. In base alla mia poca esperienza, se si ha a che fare con funzioni definite analiticamente che siano “regolari” (polinomi, seni, coseni, esponenziali, logaritmi, …) dare “smooth” funziona sempre e aiuta a ridurre drasticamente “samples”.Faccio i complimenti a Liverpool per il controesempio che mostra che le spline non sono sempre indicate . D’altra parte, stiamo parlando di interpolazione (sia lineare sia con spline cubiche): interpolare vuol dire che un (certo) errore lo si commette sempre. Si tratta di minimizzarlo.
Riguardo agli errori di sforamento della memoria, ci sono eccome, se si vogliono molti grafici ad alta risoluzione: l’esempio che ho postato qualche intervento fa mi sembra significativo. Ci sono poche decine di grafici in tutto: le curve sono tutte con “samples=40” o “samples=50” (che non è una tragedia); le superfici le ho dovute mettere tutte con “samples=30”: mi basta portarne anche una sola a “samples=40”, e ottengo l’errore di sforamento della memoria.
Qualche altra domanda:
1.
Mi confermate che l’opzione “shader=interp” è l’equivalente di “smooth” nel caso di superfici tridimensionali?2.
Qual è la chiave corrispondente al valore “thick”? In altre parole: “blue” è come dire “color=blue”; “thick” a che cosa è equivalente?3.
Qual è la chiave corrispondente di “smooth”?4.
Riguardo al procedimento per ottenere la Gamma di Eulero partendo da Mathematica, ho seguito per filo e per segno le istruzioni di Liverpool, ma ottengo qualcosa di inaspettato:
La Gamma non mi va bene per due ragioni:
1. le rette verticali in blu (sembra che facciano parte della curva!);
2. le proporzioni: no capisco perché il grafico venga così piccolo, rispetto a tutti gli altri (vedi il confronto con i due grafici di sopra).Grazie,
L.
29 Aprile 2012 alle 15:31 in risposta a: Il disegno programmato nell’Arte di scrivere con LaTeX #72653::
1.
Matteo ha ragione: il numero dei grafici influisce sulla possibilità di avere un errore fatale di sforamento della memoria. L’esempio è proprio nel codice che ho inviato qualche intervento fa: se in quel codice metto “samples=100” nel sombrero (è il primo grafico) ottengo un errore. Invece compilando da solo il sombrero con “samples=100” tutto fila liscio.2.
La possibilità di incrementare la memoria disponibile è notevole. In questo modo l’utente può compilare, se ne ha bisogno, anche un libro con centinaia di grafici in alta risoluzione. Naturalmente non occorre che l’Arte spieghi come si fa: è sufficiente dire che è possibile farlo, e rimandare il lettore alla doc.3.
Hai ragione Liverpool, un paragrafo su TikZ ci va. Dico di spiegare \draw a livello elementare, con qualche esempio di segmenti, poligoni, cerchi, magari anche riempiti e colorati. Poi metto un esempio più complesso completo di sorgente giusto per dare un’idea. Poi metto un esempio molto complesso (i maialini, per esempio), ma senza sorgente, dicendo che con pazienza si può fare tutto. Sì, sapevo che dentro axis si possono usare anche gli ambienti di pgfplots: questo va detto!Grazie mille,
L.
-
AutoreRisposte