- Questo topic ha 14 risposte, 5 partecipanti ed è stato aggiornato l'ultima volta 12 anni, 1 mese fa da
elios.
-
CreatoreTopic
-
15 Luglio 2014 alle 14:41 #95311::
Ciao a tutti!
Ho un piccolo problema con dei grafici che sto disegnando con Pgfplots.
Devo diagrammare dei dati che ho in un file di testo, con colonne x e y, generati da Fluent. Sono dei grafici di temperatura lungo x.
Fin qui nessun problema, ho usato un codice del genere, seguendo le guide di Pantieri, De Marco, ecc (ai quali vanno infiniti ringraziamenti per le loro chiarissime guide):`
\begin{tikzpicture}
\begin{axis} [tralascio tutte le opzioni]
\addplot [line width=1pt,blue]
file {Temperature_X_P1};
\end{axis}
\end{tikzpicture}
`Il problema è che nel file di testo le coordinate, per qualche strano motivo, non sono ordinate secondo l’ordine crescente delle x, per cui il grafico non segue il reale andamento.
Infatti anche su excel si presenta lo stesso problema, ma c’è un’opzione che permette di ordinare secondo i valori di x.
Ho letto nelle guide che le coordinate nel file di testo vanno date secondo un certo ordine, ma possibile che non ci sia un modo per dare quest’opzione a addplot?
Ho risolto parzialmente con l’opzione only marks, ma non è così che vorrei disegnare il grafico, avrei bisogno di una linea continua.Certo, potrei ordinarli su excel e poi generare un file di testo, ma ho molti dati da diagrammare e ci metterei una vita!
Qualche suggerimento?
Grazie in anticipo 🙂
-
CreatoreTopic
-
AutoreRisposte
-
-
15 Luglio 2014 alle 15:14 #95312
-
15 Luglio 2014 alle 16:57 #95313::
Strano che il programma Fluent non ti permetta di avere i dati per ordine crescente della variabile indipendente. molto strano.Comunque tieni presente che ogni sistema operativo dispone di un comando da dare dal terminale o prompt dei comandi o console, o come si chiama con il tuo sistema operativo, ce permette di mettere in ordine le righe di un file di testo; certo anche con \excel lo puoi fare ma è molto più lungo.
Su windowd, per esempio, apri una finestra comandi, terminale, console, o come diamine si chiama, scrivici dentro help sort e poi premi il tasto invio; e il servizio help ti dice come fare, quali opzioni specificare, che tipo di ordinamento vuoi fare, eccetera. Di solito il risultato si ottiene in una frazione di tempo rispetto a quello che occorre per scrivere la pria volta il comando da eseguire; per le volte successivi premi la freccia in su del tastierino e ti si ripresenta l’ultimo comando che hai dato, dove non devi riscrivere più tutta la riga ma solo il nome del nuovo file di testo da riordinare con le stesse opzioni. Ti grantisco che è comodissimo.
Se Mac e su Linux ci sono comandi da terminale del tutto simili, ma gli utenti di Mac e, specialmente, di Linux sono abituati ad usare il terminale, mentre gli utenti Winwows scroprono il terminale con stupore essendo così abituati a lavorare solo con il mouse.
-
15 Luglio 2014 alle 17:47 #95314::
Stando a questo messaggio http://tex.stackexchange.com/questions/64014/how-to-sort-table-for-plotting-with-pgfplots ci si dovrebbe riuscire…
Fran
-
15 Luglio 2014 alle 21:37 #95315::
Innanzitutto grazie a tutti!Ho provato a seguire il suggerimento di OldClaudio, dal Prompt di Windows, ma ordina i numeri in ordine alfabetico, quindi non riconosce la notazione scientifica, e non risolve il problema.
Quindi sono andato su Linux, perché ho visto che da terminale c’era qualche opzione del genere, -n per ordinare numericamente, e -g per ordinare seguendo anche la notazione scientifica, ma per qualche motivo in nessuno dei due casi ordina in maniera corretta.
I numeri sono di questo tipo:`-0,000177758 932,835
-0,000139915 933,099
-0,000108379 933,347
-8,21E-005 933,574
-6,02E-005 933,776
-4,20E-005 933,954
-2,67E-005 934,107
-1,41E-005 934,237
-3,51E-006 934,345
3,43E-013 934,385`Potrei farlo tramite excel, che ordina bene, ma ci vorrebbe troppo tempo…
Può darsi che Fluent abbia qualche opzione per ordinare in maniera corretta i dati che scrive, ma sono file che ho già acquisito e salvato, vorrei evitare di fare tutto da capo, non sono pochi…
Domani proverò a seguire il metodo indicato da franen, oppure li ordinerò tramite excel…
-
16 Luglio 2014 alle 4:28 #95316
-
16 Luglio 2014 alle 4:32 #95317::
`\documentclass{standalone}
\usepackage{pgfplots, pgfplotstable}\usepackage{filecontents}
\begin{filecontents}{testdata.dat}
x y
-0.000177758 932.835
-0.000139915 933.099
-1.41E-005 934.237
-0.000108379 933.347
-8.21E-005 933.574
-6.02E-005 933.776
-4.20E-005 933.954
-2.67E-005 934.107
-3.51E-006 934.345
3.43E-013 934.385
\end{filecontents}\pgfplotstablesort{\sorted}{testdata.dat}
\begin{document}
\begin{tikzpicture}
\begin{axis}
\addplot table {\sorted};
\end{axis}
\end{tikzpicture}
\end{document}`
Funziona tutto! (io ho sostituito le virgole con i punti, ma con pgfplots c’è il modo di usare anche le vorgole (solo che facevo prima così, senza andare a cercare…).Ho avuto anche io esperienze col comando sort di windows, solo che ha il difetto di ordinare i numeri come 1,11,2,21,3,…
Fran
-
16 Luglio 2014 alle 4:42 #95318::
Così, tanto per dire: nel mondo LaTeX3 c’è il pacchetto l3sort che permette di ordinare liste, sequenze e token list. Un esempio:`\documentclass{article}
\usepackage{xparse,l3sort}\ExplSyntaxOn
\clist_set:Nn \l_foo_clist {-0.1,0.3,-1.56}
\clist_sort:Nn \l_foo_clist
{
\fp_compare:nNnTF { #1 } > { #2 }
{ \sort_reversed: }
{ \sort_ordered: }
}
\NewDocumentCommand\SortList{}
{\clist_use:Nnnn \l_foo_clist { ,~ } { ,~ } { ,~ } }
\ExplSyntaxOff
\begin{document}
\SortList
\end{document}`
Certo, in questo caso non è di molta utilità 🙂Fran
-
16 Luglio 2014 alle 7:00 #95319::
Forse il problema è il separatore decimale.
Pgfplots credo capisca i numeri con il punto mentre nei dati che hai mostrato c’é la virgola.
Inoltre i tuoi dati sono già ordinati ma per la seconda colonna.
R.No, i numeri originariamente sono con il punto, ho messo la virgola per importarli in excel.
Sono ordinati solo per caso rispetto alla seconda colonna, evidentemente è un tratto con variazione monotona della temperatura. Ma comunque devono essere ordinati rispetto alla prima colonna, l’ascissa.Funziona tutto! (io ho sostituito le virgole con i punti, ma con pgfplots c’è il modo di usare anche le vorgole (solo che facevo prima così, senza andare a cercare…).
Ho avuto anche io esperienze col comando sort di windows, solo che ha il difetto di ordinare i numeri come 1,11,2,21,3,…
Fran
Sì ho visto, ma la serie di dati per ogni grafico è molto più grande di questa, fino a 500-700 numeri, se li copio tutti il codice diventa enorme!
Grazie, vedo un po’ come fare, magari con excel 🙂
-
16 Luglio 2014 alle 7:07 #95320::
elios” post=94941
Forse il problema è il separatore decimale.
Pgfplots credo capisca i numeri con il punto mentre nei dati che hai mostrato c’é la virgola.
Inoltre i tuoi dati sono già ordinati ma per la seconda colonna.
R.No, i numeri originariamente sono con il punto, ho messo la virgola per importarli in excel.
Sono ordinati solo per caso rispetto alla seconda colonna, evidentemente è un tratto con variazione monotona della temperatura. Ma comunque devono essere ordinati rispetto alla prima colonna, l’ascissa.Funziona tutto! (io ho sostituito le virgole con i punti, ma con pgfplots c’è il modo di usare anche le vorgole (solo che facevo prima così, senza andare a cercare…).
Ho avuto anche io esperienze col comando sort di windows, solo che ha il difetto di ordinare i numeri come 1,11,2,21,3,…
Fran
Sì ho visto, ma la serie di dati per ogni grafico è molto più grande di questa, fino a 500-700 numeri, se li copio tutti il codice diventa enorme!
Grazie, vedo un po’ come fare, magari con excel 🙂
In pgfplots puoi caricare dati da file esterni, se è questo il problema.
Io eventualmente vedrei l’uso di un foglio di calcolo sono per effettuare l’ordinamento dei valori.
A proposito, lo sai che in un foglio elettronico si può importare i dati anche con il punto decimale con conversione automatica di formato vero?
R.ps.
si potrebbe scrivere un piccolo script che ordina i dati di tutti i file in un colpo solo…
-
16 Luglio 2014 alle 7:07 #95321::
elios” post=94941
Sì ho visto, ma la serie di dati per ogni grafico è molto più grande di questa, fino a 500-700 numeri, se li copio tutti il codice diventa enorme!
Spetta spetta…
non è che devi copiare i tuoi dati nel documento! Nel mio esempio ho usato il pacchetto filecontents che permette di creare un file esterno, in questo caso il file testdata.dat. Tu dovresti solo crearti i tuoi file di testo contenenti i tuoi dati e poi usarli per fare i grafici!
Fran
-
16 Luglio 2014 alle 7:09 #95322::
elios” post=94941
Funziona tutto! (io ho sostituito le virgole con i punti, ma con pgfplots c’è il modo di usare anche le vorgole (solo che facevo prima così, senza andare a cercare…).
Ho avuto anche io esperienze col comando sort di windows, solo che ha il difetto di ordinare i numeri come 1,11,2,21,3,…
Fran
Sì ho visto, ma la serie di dati per ogni grafico è molto più grande di questa, fino a 500-700 numeri, se li copio tutti il codice diventa enorme!
Grazie, vedo un po’ come fare, magari con excel 🙂
Guarda che il metodo che ti è stato proposto non presuppone di dover copiare i numeri da nessuna parte. Chiaramente, chi risponde non può mettere 700 valori per un test, quindi si utilizzano esempi minimi con strumenti come filecontents. Nello specifico, questo strumento altro non fa che scrivere su un file separato il contenuto dell’ambiente. Il metodo di Fran, quindi si basa sul fatto che ci sia un file esterno da leggere, in .dat o .cvs. E tu chiaramente hai quello con tutti i valori. Perciò altro non ti rimane da fare che prendere quel file e copiarlo nella cartella dove hai questo documento, rinominarlo e lanciare la compilazione.
A me sembra meno complicato che andare su Excel 😉
Ciao
Claudio
-
16 Luglio 2014 alle 7:12 #95323
-
16 Luglio 2014 alle 12:19 #95324::
Questo intervento potrebbe sembrare fuori tema, ma seocndo me non lo è.Dici che devi riportare grafici con 500-700 punti. Mmm
Sicocme la larghezza della apgina è di 210mm e i margini possono arrivare complessivamente a, diciamo 40mm, resta un larghezza di 170mm. togliamo ancora una ventina di millimetri per fare spazio ai tick e alle graduazioni degli assi, specialmante quello verticale, oltre che per la legenda dell’asse,, restano 150mm.
quindi se ci metti dentro 500 punti hi una coordinata ogni 150mm/500= 0.3mm. Capisco che il diagramma presenta delle lievi oscillazioni attrono ad un trend abbastanza definito, ma non ti pare che sia troppo mettere tre punti in un millimetro, per giunta collegati con la linea (molto spezzata) del diagramma, dove el oscillazioni sembrano rumore puro?Mi pare u diagramma mal progettato, perché ci sono troppi punti in un diagramma troppo stretto; le cose non migliorerebbero granché se riportassi il disegno rotato di 90º (in senso antiorario), visto che il fiagrama disporrebbe dell’altezza della pagina, invece che della larghezza; con un’altezza della carta di 297mm, tolti 40mm + 20mm per gli stessi motivi detti prima, arrotondando restao 250mm per il fiagramma; con 250mm/500 = 0.5mm per punto, ciò due punti al millimetro: meno brutto di prima, ma lo stesso molto poco significativo.
Conclusione: ti suggerisco di ripensare a quei diagrammi; penso che un tratto delle ascisse molto più corso sarebbe molto più significativo. Non so che cosa rappresenti il tuo diagramma; comunque non saprei consigliarti. Probabilmente con punti così filli un diagramma a linea continua o a spezzata sarebe del tutto invisibile con tanti punti così; allora tanto vale riportare solo i punti, tanto l’andamento lo si vede lo stesso e sono talmente vicini che la loro fila sembra un linea continua.
-
16 Luglio 2014 alle 19:23 #95325::
OldClaudio” post=94952Questo intervento potrebbe sembrare fuori tema, ma seocndo me non lo è.
Dici che devi riportare grafici con 500-700 punti. Mmm
Sicocme la larghezza della apgina è di 210mm e i margini possono arrivare complessivamente a, diciamo 40mm, resta un larghezza di 170mm. togliamo ancora una ventina di millimetri per fare spazio ai tick e alle graduazioni degli assi, specialmante quello verticale, oltre che per la legenda dell’asse,, restano 150mm.
quindi se ci metti dentro 500 punti hi una coordinata ogni 150mm/500= 0.3mm. Capisco che il diagramma presenta delle lievi oscillazioni attrono ad un trend abbastanza definito, ma non ti pare che sia troppo mettere tre punti in un millimetro, per giunta collegati con la linea (molto spezzata) del diagramma, dove el oscillazioni sembrano rumore puro?Mi pare u diagramma mal progettato, perché ci sono troppi punti in un diagramma troppo stretto; le cose non migliorerebbero granché se riportassi il disegno rotato di 90º (in senso antiorario), visto che il fiagrama disporrebbe dell’altezza della pagina, invece che della larghezza; con un’altezza della carta di 297mm, tolti 40mm + 20mm per gli stessi motivi detti prima, arrotondando restao 250mm per il fiagramma; con 250mm/500 = 0.5mm per punto, ciò due punti al millimetro: meno brutto di prima, ma lo stesso molto poco significativo.
Conclusione: ti suggerisco di ripensare a quei diagrammi; penso che un tratto delle ascisse molto più corso sarebbe molto più significativo. Non so che cosa rappresenti il tuo diagramma; comunque non saprei consigliarti. Probabilmente con punti così filli un diagramma a linea continua o a spezzata sarebe del tutto invisibile con tanti punti così; allora tanto vale riportare solo i punti, tanto l’andamento lo si vede lo stesso e sono talmente vicini che la loro fila sembra un linea continua.
Innanzitutto ti ringrazio per aver preso a cuore questa questione 🙂
C’è solo un diagramma che ha un così elevato numero di punti (576), e rappresenta l’andamento di temperatura lungo l’asse di un condotto, che è abbastanza lungo, per questo ha così tanti punti. Inoltre la mesh in alcune zone è abbastanza definita, e sono usciti molti punti.
Ho fatto anche dei diagrammi zoomati, attorno al centro del condotto, che è la zona più significativa, ma purtroppo serve sapere anche che valore raggiunge la T in uscita, per cui serve il grafico intero.
Se diagrammo solo i punti ho un paio di problemi, il primo è la grandezza dei punti (ma immagino si possa cambiare), che, soprattutto dove sono troppo vicini, fa sembrare che ci sia una linea molto spessa, e il secondo è che i punti non sono equispaziati, quindi si avrebbero zone molto ricche e altre molto povere.
Ho provato anche con l’opzione smooth, ma mi sembra che la situazione non migliori.
Forse la soluzione sarebbe un’interpolazione con matlab per ridurre il numero di punti, ma sinceramente non ho tempo né voglia di farlo, questo grafico può andare così 🙂
-
-
AutoreRisposte
- Devi essere connesso per rispondere a questo topic.