pgfplots con tabelle e csv

  • Creatore
    Topic
  • #111535
    Up
    0
    Down
    ::


    Ciao premesso che il pacchetto pgfplots è la prima volta che lo uso, dovrei graficare dei dati meteo che ho su dei csv, sono riuscito farlo ma quello che sto facendo non mi convince, mi sa che sto sbagliando qualche cosa perché devo fare delle cose che secondo me sono strane
    Andando per ordine:
    1) Non mi accetta i csv se invece di avere spazi ho delle virgole.
    2) Non mi accetta dati racchiusi tra ” ” quindi non riesco a mettere spazi.
    2) Devo creare un ordine cronologico aggiungendo una colonna con numero incrementale se no non mi mostra dati (ma questo ci impiego nulla quindi mi cambia poco)
    3) Non riesco ad impostare che lasse delle y sia graduale mi spiego meglio vorrei che si creassero delle linee intermedie tra i i vari valori che mi mostra

    Esempio contenuto csv (se non aggiungo la colonna ID non funziona…)
    ID Anno Massima Media Minima
    28 Ottobre-1 21.1 16.6 12.1
    29 Ottobre-2 21.4 14.8 8.1
    30 Ottobre-3 18.6 12.9 7.2
    31 Novembre-1 13.9 8.5 3
    32 Novembre-2 10.1 6 1.9
    33 Novembre-3 11.4 5.2 -1
    34 Dicembre-1 9.4 3.6 -2.1
    35 Dicembre-2 4.6 -1.6 -7.8
    36 Dicembre-3 7.5 0.2 -7.1
    […]

    Esempio codice latex
    `
    \begin{figure*}
    \begin{tikzpicture}
    \centering
    \begin{axis}[
    ymajorgrids,
    title = {Temperature medie per decadi 2001},
    xtick=data,
    xticklabels from table={pgfplots/temperatura_massima_decade_2001.csv}{Anno},
    xticklabel style={rotate=45,anchor=east},
    legend pos=outer north east
    ]
    \addplot table[x=ID,y=Massima] {pgfplots/temperatura_massima_decade_2001.csv};\addlegendentry{Massima}
    \addplot table[x=ID,y=Media] {pgfplots/temperatura_massima_decade_2001.csv};\addlegendentry{Media}
    \addplot table[x=ID,y=Minima] {pgfplots/temperatura_massima_decade_2001.csv};\addlegendentry{Minima}
    \end{axis}
    \end{tikzpicture}
    \end{figure*}
    `

    ciao

Visualizzazione 7 filoni di risposte
  • Autore
    Risposte
    • #111536
      robitex
      Amministratore del forum
        Up
        0
        Down
        ::


        Ciao.
        Non capisco esattamente il grafico che ti serve.
        Comincerei a frare un po’ di ordine con il seguente codice:
        `\documentclass{standalone}
        \usepackage{pgfplots}
        \pgfplotsset{compat=1.15}
        \pgfplotstableset{col sep=comma}
        \begin{document}
        \begin{tikzpicture}
        \footnotesize
        \begin{axis}[
        width=180mm,
        height=5cm,
        ymajorgrids,
        title = {Temperatura media massima per decade 2001},
        xtick=data,
        xticklabels from table={temp-2001.csv}{Month},
        xticklabel style={rotate=45,anchor=east},
        legend pos=outer north east
        ]
        \addplot table [
        x={ID},
        y={Gradi}] {temp-2001.csv};
        \addlegendentry{Gradi}
        \end{axis}
        \end{tikzpicture}
        \end{document}`

        e il file dati seguente:
        `Month, ID, Gradi
        Ottobre 1, 1,21.1
        Ottobre 2, 2,21.4
        Ottobre 3, 3,18.6
        Novembre 1, 4,13.9
        Novembre 2, 5,10.1
        Novembre 3, 6,11.4
        Dicembre 1, 7,9.4
        Dicembre 2, 8,4.6
        Dicembre 3, 9,7.5`

        Alla prossima.
        R.

      • #111537
        Up
        0
        Down
        ::


        Ciao scusa il ritardo intanto grazie per la risposta velocissima.
        Comunque avevi ragione viene una porcheria il grafico fatto in quel modo…
        In pratica devo fare un grafico con dei dati di temperatura riferiti a 10 anni, ma qualcosa mi dice che l’approccio che ho scelto è pessimo…
        in teoria a questo punto è fattibile fare un grafico tipo questo tipo dove al posto dell’etichetta thur ci metto la decade ad esempio di gennnaio e la barra è generata dai 10 valori che ho

        esempio tabella ho tagliato un po di colonne e righe perchè se no veniva lunghissima…
        ID Decade 2002 2003 2004 ….
        1 Gennaio-1 7.5 7.7 4.7 ….
        2 Gennaio-2 8 6.4 9 ….
        3 Gennaio-3 9.9 8.3 4.3 …
        4 Febbraio-1 11.4 7.7 12.1 …
        5 Febbraio-2 9.2 4.5 9 ….
        6 Febbraio-3 12.4 10.1 5 ….

        in pratica vorrei avere sotto la scritta che sta a decade e sopra un tratto che accoppi lintera tupla da 2002 a 200x

        Attachments:
        You must be logged in to view attached files.
      • #111538
        robitex
        Amministratore del forum
          Up
          0
          Down
          ::

          ermac” post=111885Ciao scusa il ritardo intanto grazie per la risposta velocissima.
          Comunque avevi ragione viene una porcheria il grafico fatto in quel modo…
          In pratica devo fare un grafico con dei dati di temperatura riferiti a 10 anni, ma qualcosa mi dice che l’approccio che ho scelto è pessimo…
          in teoria a questo punto è fattibile fare un grafico tipo questo tipo dove al posto dell’etichetta thur ci metto la decade ad esempio di gennnaio e la barra è generata dai 10 valori che ho

          esempio tabella ho tagliato un po di colonne e righe perchè se no veniva lunghissima…
          ID Decade 2002 2003 2004 ….
          1 Gennaio-1 7.5 7.7 4.7 ….
          2 Gennaio-2 8 6.4 9 ….
          3 Gennaio-3 9.9 8.3 4.3 …
          4 Febbraio-1 11.4 7.7 12.1 …
          5 Febbraio-2 9.2 4.5 9 ….
          6 Febbraio-3 12.4 10.1 5 ….

          in pratica vorrei avere sotto la scritta che sta a decade e sopra un tratto che accoppi lintera tupla da 2002 a 200x

          Ciao,
          credo di aver capito cosa intendi. Ti ho tracciato la curva con le barre d’errore per un solo anno.
          Ecco il codice:
          `\documentclass{standalone}
          \usepackage{pgfplots}
          \pgfplotsset{compat=1.15}
          \pgfplotstableset{col sep=comma}
          \newcount\month

          \begin{document}
          \footnotesize
          \begin{tikzpicture}
          \begin{axis}[
          width=180mm,
          height=5cm,
          ymajorgrids,
          title = {Temperatura media massima per decade 2001},
          xtick=data,
          xticklabels from table={temp-2001.csv}{month},
          x filter/.code={%
          \pgfmathparse{\the\month}
          \advance \month by 1
          },
          xticklabel style={rotate=45,anchor=east},
          legend pos=outer north east
          ]

          \addplot+[
          error bars/.cd,
          y dir=both,
          y explicit
          ] table [
          y error plus=ey+,
          y error minus=ey-,
          y={deg}] {temp-2001.csv};

          \addlegendentry{Gradi}
          \end{axis}
          \end{tikzpicture}
          \end{document}
          `

          e il file csv è:
          `month, deg, ey-, ey+
          Gennaio, 8.6, 7.5, 9.9
          Febbraio, 9.2, 11.4, 12.4
          Marzo, 10.2, 8.5, 11.2
          Aprile, 12.2, 9.5, 13.2
          Maggio, 14.2, 10.5, 15.2
          Giugno, 16.2, 11.5, 16.2
          `

          Come hai fatto già tu, le etichette sull’asse x sono prese dal file csv mentre il loro effettivo valore non è altro che la sequenza 0 1 2 3 eccetera, realizzata con un contatore e l’opzione x filter/.code.

          Pgplots plotterà il punto per il mese di Gennaio all’ordinata 0, per Febbraio all’ordinata 1 eccetera.
          Le ordinate invece le otterrà dal csv, dove deg è il valore base in gradi e ey+ e ey- sono gli sconstamenti in più e i meno da quel valore.
          Per esempio, con i dati del file csv, per Gennaio verrà disegnata una linea verticale dal valore (8.6-7.5) al valore (8.6+9.9).

          Ovviamente occorre rifinire parecchi dettagli, come l’aspetto delle estremità delle barre. Il manuale spiega come si fa.

          Temo tuttavia che plottare più decadi sullo stesso grafico non sia il massimo perché le linee verticali delle barre d’errore probabilmente si sovrapporrebbero.
          Un saluto.
          R.

        • #111539
          Up
          0
          Down
          ::


          Ok grazie mille… di nuovo
          Appena ho tempo ci provo… sperando che sia la volta buona. In realtà la mia idea iniziale era fare un grafico di tipo violino ma non ho trovato da nessuna parte come farlo se non passando da programmi esterni…
          ti faro sapere come viene fatto cosi

        • #111540
          robitex
          Amministratore del forum
            Up
            0
            Down
            ::

            ermac” post=111918Ok grazie mille… di nuovo
            Appena ho tempo ci provo… sperando che sia la volta buona. In realtà la mia idea iniziale era fare un grafico di tipo violino ma non ho trovato da nessuna parte come farlo se non passando da programmi esterni…
            ti faro sapere come viene fatto cosi

            Se ci dici com’è fatto un grafico a violino….
            Magari ti possiamo aiutare a realizzarlo.
            R.

          • #111541
            Up
            0
            Down
            ::


            Ciao alla fine anche cosi non mi convinceva tanto e quindi ho spezzato il grafico su 4 grafici differenti usando il tipo grafico a linee…

            Visto che me lo hai chiesto il grafico a violino è molto bello perché permette di dare una visualizzazione non sono dei range massimo minimo ma anche della disposizione dei dati in quest’ultimi

            esempio metti di avare un valore massimo 10 e un valore minimo di 5, ma all’interno di questi valori hai tutta una serie di sottovallori tipo 9; 8.7; 8.3; 8 ; […] 6; 6.3; 5 con il grafico a violino riesci a vedere dove sono maggiormente concentrati valori, ti allego una immagine.


          • #111542
            robitex
            Amministratore del forum
              Up
              0
              Down
              ::


              Ciao.
              Ottimo. Tuttavia non ci hai detto se hai realizzato i grafici a violino con pgfplots…
              R.

            • #111543
              Up
              0
              Down
              ::


              No alla fine come dicevo nel post precedente ho spezzato il grafici su più grafici…
              Dopo diverse ricerche comunque credo di essere arrivato alla conclusione che i grafici a violino pgfplots non sia in grado di farli o almeno non con le mie conoscenze in materia…

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

          Go to top