Label grafici di Octave con Latex

  • Creatore
    Topic
  • #92666
    Up
    0
    Down
    ::


    Buongiorno a tutti,

    nel creare grafici con Octave mi trovo ad aver problemi poiché titolo e x-label presentano la parola “velocità” e le lettere accentate non vengono riconosciute.

    Ho trovato un pacchetto che potrebbe fare al caso mio, psfrag, ma non capisco bene come funziona. Qualcuno ha dimestichezza? Oppure soluzioni alternative (meglio ancora se direttamente con octave)??

    Grazie a tutti!
    L.

Visualizzazione 22 filoni di risposte
  • Autore
    Risposte
    • #92667
      Up
      0
      Down
      ::


      Aggiungo qualche info e la prova che ho fatto prendendo spunto da altri post del forum
      `
      figure;
      subplot(231);
      plot(U1y,Z1,'b');
      hold on;
      plot(U1m,Z1m,'ro-');
      legend('OpenFOAM','Measured','boxon')
      title('S1');
      xlabel('V');
      ylabel('z');
      grid on;
      `

      Questo è il mio codice di octave, ci saranno altri 5 subplot perchè devo fare un confronto tra 5 stazioni di misura.
      Se utilizzo il comando psfrag come:
      `
      \begin{figure}[h]
      \psfrag{V}{Velocità}
      \includegraphics[scale=0.93]{\figspath Uy.eps}
      \caption { Profili di velocità ecc …. }
      \end{figure}
      `
      Dovrebbe funzionare giusto?

      Grazie.
      L.

    • #92668
      Up
      0
      Down
      ::

      Frigeri” post=92229Aggiungo qualche info e la prova che ho fatto prendendo spunto da altri post del forum
      `
      figure;
      subplot(231);
      plot(U1y,Z1,'b');
      hold on;
      plot(U1m,Z1m,'ro-');
      legend('OpenFOAM','Measured','boxon')
      title('S1');
      xlabel('V');
      ylabel('z');
      grid on;
      `

      Questo è il mio codice di octave, ci saranno altri 5 subplot perchè devo fare un confronto tra 5 stazioni di misura.
      Se utilizzo il comando psfrag come:
      `
      \begin{figure}[h]
      \psfrag{V}{Velocità}
      \includegraphics[scale=0.93]{\figspath Uy.eps}
      \caption { Profili di velocità ecc …. }
      \end{figure}
      `
      Dovrebbe funzionare giusto?

      Grazie.
      L.

      Certo che dovrebbe funzionare, se non fosse che, a mio parere, voler usare psfrag è farsi male da soli. Oggi, sia Matlab che Octave possono esportare in TikZ ed è veramente il metodo migliore per avere un’ottima qualità; leggi http://2pif.info/tutorial/pgfprint-en.html

      Ciao
      Claudio

    • #92669
      Up
      0
      Down
      ::


      CIao,

      l’uso di psfrag sopra non funziona, e non capisco perchè.

      Ho scelto una terza via..stampare i grafici da Octave in formato SVG, dopodiché con il comando “sed” sostituisco la xlabel chiamandola velocità e successivamente quando sposto l’immagine nella cartella relativa alle immagini che utilizzo in latex passo da formato SVG a EPS .. ed il gioco è fatto.

      Sembra lungo, ma da quando stampo i grafici a quando li inserisco in latex passano si e no 1 minuto massimo. Per quanto riguarda l’esportazione in Tikz, sarà stato l’orario e che il mio cervello era fuso ma non riuscivo a fare ciò che volevo.

    • #92670
      Up
      0
      Down
      ::


      La mattina si è piu freschi e già qualche passo avanti è stato fatto.

      Grafico inserito col comando \input{tikz file} e tutto va bene. Sto cercando di capire come poter fare per inserirlo e modificare label, titolo, assi, griglia e legenda come li desidero io..

      Suggerimenti? Grazie.

    • #92671
      Up
      0
      Down
      ::

      Frigeri” post=92244La mattina si è piu freschi e già qualche passo avanti è stato fatto.

      Grafico inserito col comando \input{tikz file} e tutto va bene. Sto cercando di capire come poter fare per inserirlo e modificare label, titolo, assi, griglia e legenda come li desidero io..

      Suggerimenti? Grazie.

      Bene, a questo punto hai ottenuto del codice TikZ, in particolare un plot che richiede pgfplots. Leggi la documentazione di pgfplots: è spiegato molto bene come personalizzare completamente l’aspetto dei grafici. Per esempio, vuoi seguire lo stide di Edward Tufte? Guarda qui diversi metodi di personalizzazione. Ovviamente, quello è un esempio particolare, molto probabilmente le tue esigenze sono diverse.

      Ciao
      Claudio

    • #92672
      Up
      0
      Down
      ::


      In quel link, e anche nella documentazione di pgfplots ecc ecc vedo che c’è il comando `\begin{axis}` per modificare tutto ciò che servirebbe a me.. ma poi seguito da `addplot` .. A me serve qualcosa che mi permetta di modificare le varie cose introducendo il grafico con il comando `\input`

    • #92673
      Up
      0
      Down
      ::


      [attachment=932]Schermatadel2014-02-20143941.pdf[/attachment]

      [attachment=933]Schermatadel2014-02-20150316.pdf[/attachment]
      Ora ho fatto un altro piccolo passettino avanti.. con il codice:
      `
      %\begin{figure}
      \begin{tikzpicture}
      \begin{axis}[
      xlabel={Velocità},
      ylabel={Altezza},
      axis lines*=left,
      %xmin=0.018, ymin=0.03
      ]
      \addplot graphics[xmin=0,xmax=0.4,ymin=0,ymax=1.8]
      {\figspath U1_70733};
      %\caption{My TikZ picture}
      %\label{fig:tikz:my}
      \end{axis}
      \end{tikzpicture}
      %\end{figure}
      `

      il risultato è quello in allegato. Lasciando stare etichette, scala e griglia già presenti che posso benissimo evitare di metterle nello script di Octave… come potrei far coincidere gli assi del grafico importato con gli assi di pgfplots?

      Grazie

      ps: Allegato grafico “sporco” e “pulito”

      Attachments:
      You must be logged in to view attached files.
    • #92674
      Up
      0
      Down
      ::

      Frigeri” post=92259
      Ora ho fatto un altro piccolo passettino avanti.. con il codice:
      `
      %\begin{figure}
      \begin{tikzpicture}
      \begin{axis}[
      xlabel={Velocità},
      ylabel={Altezza},
      axis lines*=left,
      %xmin=0.018, ymin=0.03
      ]
      \addplot graphics[xmin=0,xmax=0.4,ymin=0,ymax=1.8]
      {\figspath U1_70733};
      %\caption{My TikZ picture}
      %\label{fig:tikz:my}
      \end{axis}
      \end{tikzpicture}
      %\end{figure}
      `

      il risultato è quello in allegato. Lasciando stare etichette, scala e griglia già presenti che posso benissimo evitare di metterle nello script di Octave… come potrei far coincidere gli assi del grafico importato con gli assi di pgfplots?

      Grazie

      ps: Allegato grafico “sporco” e “pulito”

      Ciao, mi intrometto in questa discussione perché trovo l’argomento molto interessante.

      Penso che la function pgfprint sia una soluzione, io solitamente uso la function matlab2tikz. Li avete provati entrambi? Sapreste dirmi secondo voi quale conviene usare? Personalmente ho trovato l’utilizzo di pgfprint leggermente complicato mentre matlab2tikz mi sembra più immediato.

      Ciao
      Marco

      @Frigeri: non vedo gli allegati

    • #92675
      Up
      0
      Down
      ::


      Ho sistemato gli allegati mentre rispondevi.

      Comunque, ho dato un occhiata e quelle due funzioni non mi servono a molto. Quello che serve a me è mettere xlabel = Velocità .. e Octave purtroppo non riconosce le lettere accentate.

      Ci sono diverse soluzione, quella che per ora viene meglio è stampare il grafico in formato svg, usare il comando “sed” da terminale e sostituire un ipotetico xlabel = Velocit in Velocità, convertire in eps e latex legge il grafico (ma la qualità non è un granché)

      Oppure potrei usare appunto `\begin{tikzpicture}
      \begin{axis}
      \addplot {file}
      `
      e questo mi permette, tramite le opzioni di axis, di modificare tutto quello che mi serve. Ma gli assi del grafico creato da tikzpicture non corrispondono agli assi del grafico importato. Mi servirebbe conoscere i comandi per spostare il grafico importato, o meglio ancora uno specifico comando per far coincidere le due origini.

      Grazie

    • #92676
      Up
      0
      Down
      ::


      Forse non è chiaro il workflow.

      1) Genero il plot con Matlab o Octave.
      2) Esporto con matlab2tikz o la routing pgfprint per Octave.
      3) Ottengo un “bellissimo” codice.
      4) Personalizzo il grafico.

      Il codice ottenuto, se ben ricordo, per matlab2tikz è un documento completo, per pgfprint è solo la figura ossia: `
      \begin{tikzpicture}
      \begin{axis}[opzioni]
      \addplot ….
      \end{axis}
      \end{tikzpicture}
      ` Tutta quella roba viene chiamata [tt]pippo.tikz[/tt] ed importata con [tt]\input{pippo.tikz}[/tt]. Benissimo, cambia le opzioni dentro il file e avrai personalizzato il grafico.


      @Marchetto
      : Non ho mai provato pgfprint, ma la storia è sempre la stessa. Il workflow è il medesimo, cambiano solo i passi da fare per esportare. Alla fine hai sempre del codice che, essendo codice, puoi modificare come ti pare.

      Ciao
      Claudio

    • #92677
      Up
      0
      Down
      ::

      Frigeri” post=92262Ho sistemato gli allegati mentre rispondevi.

      Comunque, ho dato un occhiata e quelle due funzioni non mi servono a molto. Quello che serve a me è mettere xlabel = Velocità .. e Octave purtroppo non riconosce le lettere accentate.

      Ci sono diverse soluzione, quella che per ora viene meglio è stampare il grafico in formato svg, usare il comando “sed” da terminale e sostituire un ipotetico xlabel = Velocit in Velocità, convertire in eps e latex legge il grafico (ma la qualità non è un granché)

      Oppure potrei usare appunto `\begin{tikzpicture}
      \begin{axis}
      \addplot {file}
      `
      e questo mi permette, tramite le opzioni di axis, di modificare tutto quello che mi serve. Ma gli assi del grafico creato da tikzpicture non corrispondono agli assi del grafico importato. Mi servirebbe conoscere i comandi per spostare il grafico importato, o meglio ancora uno specifico comando per far coincidere le due origini.

      Grazie

      Il tuo procedimento è una soluzione però (come anche tu ammetti) non restituisce una gran qualità e in più è un metodo macchinoso.
      Quello che cfiandra ti ha consigliato mi sembra richiedere meno passaggi e la resa grafica è ottima. Non vorrei sbagliarmi ma credo che entrambi, pgfprint e matlab2tikz siano compilabili sia con Octave che con Matlab.
      In questo caso toglieresti i passaggi di esportare, modificare e covertire il file. Dovresti semplicione creare il frafico con Octave con il comando plot, richiamare lo script pgfprint (o l’altro), questo passaggio ti permette di generare automaticamente un file .tex che andrai ad inserire nell’ambiente tikzpicture in latex.

      Se il tuo problema è come modificare gli assi, la griglia e le varie proprietà del grafico allora il discorso è un’altro. Come sempre il consiglio è di leggere il manuale del pacchetto che usi per fare il grafico, in più c’è un capitolo apposito sulle guida ArteLatex che è semplificato ma che contiene tutte le informazioni per creare grafici come quelli che hai allegato.

    • #92678
      Up
      0
      Down
      ::


      Se ti va, prova a inserire un file con le coordinate dei punti del grafico

    • #92679
      Up
      0
      Down
      ::



      @Frigeri
      : ho visto ora i tuoi allegati.

      Il problema che hai in quello che chiami grafico sporco è che hai inserito un grafico dentro l’altro. Non hai notato? La riga sospetta è `\addplot graphics[xmin=0,xmax=0.4,ymin=0,ymax=1.8]`

      Rifacciamo tutto da capo. Come si fa ad esportare un grafico in Matlab/Octave? È molto semplice.

      Supponiamo di avere il seguente file [tt]prova.m[/tt]:`
      x=[-pi:0.2:pi];
      y=sin(x);
      plot(x,y,'-o')
      title('Grafico della funzione sin(x)')
      xlabel('x')
      ylabel('y')
      grid on
      text(1.1,-0.3,'funzione dispari')
      ` Nella stessa directory, copio la mia routing matlab2tikz.m; eseguo: `
      >> prova
      prova
      >> matlab2tikz
      ` si aprirà una finestra che chiede di salvare un file con estensione .tikz. Gli si da un nome e questo file è:`
      % This file was created by matlab2tikz v0.0.5.
      % Copyright (c) 2008–2010, Nico Schlmer
      % All rights reserved.
      %
      % The latest updates can be retrieved from
      % http://win.ua.ac.be/~nschloe/content/matlab2tikz/
      % and
      % http://www.mathworks.com/matlabcentral/fileexchange/22022 .
      % where you can also make suggestions and rate matlab2tikz.

      \begin{tikzpicture}

      % Axis at [0.13 0.11 0.78 0.81]
      \begin{axis}[
      scale only axis,
      width=6.01829in,
      height=4.74668in,
      xmin=-4, xmax=4,
      ymin=-1, ymax=1,
      xlabel={$x$},
      ylabel={$y$},
      title={$Grafico della funzione sin(x)$},
      xmajorgrids,
      ymajorgrids]

      \addplot [
      color=blue,
      solid,
      mark=o,
      mark options={solid}
      ]
      coordinates{
      (-3.14159,-1.22465e-16) (-2.94159,-0.198669) (-2.74159,-0.389418) (-2.54159,-0.564642) (-2.34159,-0.717356) (-2.14159,-0.841471) (-1.94159,-0.932039) (-1.74159,-0.98545) (-1.54159,-0.999574) (-1.34159,-0.973848) (-1.14159,-0.909297) (-0.941593,-0.808496) (-0.741593,-0.675463) (-0.541593,-0.515501) (-0.341593,-0.334988) (-0.141593,-0.14112) (0.0584073,0.0583741) (0.258407,0.255541) (0.458407,0.44252) (0.658407,0.611858) (0.858407,0.756802) (1.05841,0.871576) (1.25841,0.951602) (1.45841,0.993691) (1.65841,0.996165) (1.85841,0.958924) (2.05841,0.883455) (2.25841,0.772764) (2.45841,0.631267) (2.65841,0.464602) (2.85841,0.279415) (3.05841,0.0830894)
      };

      \end{axis}

      \end{tikzpicture}
      ` Tra parentesi, noto ora che non c’è più il documento completo come una volta. Pazienza. Basta inserirlo in: `
      \documentclass[tikz]{standalone}
      \usepackage{pgfplots}
      \begin{document}
      \input{prova.tikz}
      \end{document}
      ` Mi sembra di una semplicità infinita. Se si vogliono modifcare delle opzioni, si modificano in [tt]begin{axis}[/tt].

      Ciao
      Claudio

    • #92680
      Up
      0
      Down
      ::


      Caro cfiandra…

      Dopo aver preso a testate il pc mi son preso una pausa caffé e tornato con la calma riprovato. Semplicità infinita difatti.

      Ora vedo di modificare le varie cose come serve a me..non credo di avere più problemi. Grazie a tutti per la pazienza 🙂 🙁 che figuraccia!!

    • #92681
      Liverpool
      Partecipante
        Up
        0
        Down
        ::


        Dirò qualcosa che normalmente non dico, perché se la dicessero a me, mi farebbe innervosire, ma in questo caso calza a pennello e stranamente nessuno l’ha suggerita: ma non sarebbe stato più semplice esportare i dati in un file esterno e importarli in pgfplots, invece di mettere mano comunque alle impostazioni degli assi?

        Ciao

      • #92682
        Up
        0
        Down
        ::


        Sto lavorando con OpenFOAM , ho 7 stazioni in cui vengono fatte 200 misurazioni di 6 grandezze (anzi 8 poiché la velocità va scomposta nelle 3 componenti), quindi mi vengono dati 42 file di testo ogni giorno. Devo plottare il tutto in tempo quasi zero (tramite Octave) e alla fine di tutto anche l’occhio deve avere la sua parte perchè finiranno direttamente in tesi.

        Non so cosa intendi esportare i dati….. estremizzando se avessi dovuto fare una cosa del genere con (BESTEMMIO) Excel….perdevo circa 5/6 ore al giorno senza contare il fatto che anche li avrei dovuto scrivere titoli,label,sistemare griglia,legenda.. ma sono certo non sia questa la soluzione che intendevi 🙂

      • #92683
        Up
        0
        Down
        ::

        Liverpool” post=92274Dirò qualcosa che normalmente non dico, perché se la dicessero a me, mi farebbe innervosire, ma in questo caso calza a pennello e stranamente nessuno l’ha suggerita: ma non sarebbe stato più semplice esportare i dati in un file esterno e importarli in pgfplots, invece di mettere mano comunque alle impostazioni degli assi?

        Ciao

        Secondo me esportare i dati dal software di calcolo oppure fargli creare un file .tex con dati e codice per l’ambiente tikz fa poca differenza.
        Vedo due motivi per cui scegliere un metodo o l’altro:il numero di volte che questa operazione viene ripetuta e quante volte bisogna modificare l’aspetto dei grafici. Mi spiego.

        1. Per esportare i dati bisogna scrivere dei comandi in Octave che garantiscano la giusta formattazione del testo contenente le coordinate dei grafici, altrimenti latex non riesce a leggerle. Questo porta via tempo (io prima di imbroccare quella giusta farei molti errori e altrettante prove). Questo problema viene ovviato dallo script matlab2tikz.m.
        2. Se i grafici da inserire nel documento sono tutti simili tra loro e bisogna fare poche modifiche rispetto al grafico prodotto da Octave allora secondo me conviene usare lo script cche genera direttamente il file .tex da inserire nel main con un semplice \include. Se invece Rispetto a quanto pordotto da Octave i grafici devono essere impostati diversamente o se si vogliono decidere le impostazione per ogni grafico uno per uno allora conviene esportare i dati.

        Questo è solo il mio punto di vista, potrebbe essere anche non condiviso dai più esperti.

        Ciao
        Marco

      • #92684
        Liverpool
        Partecipante
          Up
          0
          Down
          ::

          Frigeri” post=92280Non so cosa intendi esportare i dati….. estremizzando se avessi dovuto fare una cosa del genere con (BESTEMMIO) Excel….perdevo circa 5/6 ore al giorno senza contare il fatto che anche li avrei dovuto scrivere titoli,label,sistemare griglia,legenda.. ma sono certo non sia questa la soluzione che intendevi 🙂

          Se hai i tuoi dati in un file di testo del tipo:
          `0 0
          1 1
          2 4
          3 9`
          puoi farli leggere direttamente da [tt]pgfplots[/tt] con il comando
          `\addplot [opzioni] table {nome del file};`
          Perciò, siccome Octave può scriverti i tuoi dati in un file di testo formattato in quel modo, non hai bisogno di passare da altri programmi.

          Non conosco OpeFOAM perciò ti chiedo di spiegarmi il flusso di lavoro. Il software ti restituisce dei file di testo.
          Che c’è scritto in questi file?
          Poi tu li passi ad Octave esclusivamente per disegnare i grafici?
          I grafici hanno in gran parte le stesse etichette e la stessa legenda?

          Ciao

        • #92685
          Up
          0
          Down
          ::


          OpenFOAM è un software opensource di fluidodinamica computazionale per effettuare qualunque tipo di simulazione CFD.

          Mi da dei file di testo che io gestisco con un paio di comandi C++ in modo da avere solo colonne di numeri.. in particolare mi da 6 file di testo per 6 grandezze COMPLETAMENTE diverse. Resta uguale solo l’asse Y. In Octave devo anche fare alcuni calcoli, non troppo complessi ma parecchi.

          Il mio problema maggiore è plottare la velocità in quanto Octave non codifica le lettere accentate, quindi prendo i file di output di OpenFOAM, li plotto con octave, li faccio stampare in formato tikz e poi `\input` in Latex e modifico tutto ciò che ho bisogno di modificare.

          CIao

        • #92686
          Liverpool
          Partecipante
            Up
            0
            Down
            ::

            Frigeri” post=92290in particolare mi da 6 file di testo per 6 grandezze COMPLETAMENTE diverse. Resta uguale solo l’asse Y. In Octave devo anche fare alcuni calcoli, non troppo complessi ma parecchi.

            Allora potresti salvare i dati che vuoi disegnare con il comando [tt]save[/tt] di Octave e importarli in pgfplots come ti ho accennato. Non te lo sto dicendo per convincerti a cambiare strada (e non voglio farti perdere tempo), ma solo per farti sapere che c’è anche un altro metodo. Nel discorso ho dato per scontato che i calcoli che fai in Octave ti servano per ottenere i dati da tracciare, altrimenti il percorso parte direttamente dai file ripuliti che passi ad Octave.

            Ciao

          • #92687
            Up
            0
            Down
            ::

            Frigeri” post=92268Caro cfiandra…

            Dopo aver preso a testate il pc mi son preso una pausa caffé e tornato con la calma riprovato. Semplicità infinita difatti.

            Ora vedo di modificare le varie cose come serve a me..non credo di avere più problemi. Grazie a tutti per la pazienza 🙂 🙁 che figuraccia!!

            Figurarsi, capita a tutti una giornata no 😉

            Liverpool” post=92274Dirò qualcosa che normalmente non dico, perché se la dicessero a me, mi farebbe innervosire, ma in questo caso calza a pennello e stranamente nessuno l’ha suggerita: ma non sarebbe stato più semplice esportare i dati in un file esterno e importarli in pgfplots, invece di mettere mano comunque alle impostazioni degli assi?

            Ciao

            Vero, era un metodo che ancora mancava alla discussione.

            Ovviamente, dipende molto dal workflow del lavoro e dalla quantità di calcoli che Matlab/Octave svolgono sui dati. Nel caso in cui i dati in output dal simulatore siano già pronti per un grafico, il passaggio Matlab/Octave è perfettamente inutile.

            Ciao
            Claudio

          • #92688
            OldClaudio
            Partecipante
              Up
              0
              Down
              ::


              Ma se la difficoltà maggiore la il fatto che Ocave non gestisca le lettere accentate con in Velocità, perché non scirvi Velocit\`a?

            • #92689
              Up
              0
              Down
              ::


              Lo script iniziale prevedeva: carica file testo -> elaborarli -> plottarli -> stampare grafico -> importarlo come immagine direttamente in latex. Poi purtroppo Octave non riconosce le lettere accentate (@OldClaudio già provata la tua soluzione ma non funziona, ha delle codifiche diverse, cosi come se non sbaglio non riconosce le lettere greche ad esempio) e ho dovuto risolvere sta magagna.. dopo 2 giorni di tentativi vari e trovata la soluzione con `tikzpicture` e vari smanettamenti negli script di octave (dove l’unica cosa che è rimasta è il comando print… non ho proprio voglia di modificare ancora e, per qualche strana combinazione astrale, rischiare di avere altri problemi 🙂

              Ma sicuramente ne terrò conto le prossime volte.

              Buon WE a tutti.

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

          Go to top