Pgfplots e diagrammi di Gantt

  • Questo topic ha 19 risposte, 4 partecipanti ed è stato aggiornato l'ultima volta 14 anni fa da Andrea.
  • Creatore
    Topic
  • #77880
    Andrea
    Partecipante
      Up
      0
      Down
      ::


      Salve a tutti,

      ho la necessità di creare un grafico in cui viene indicata la durata temporale di una serie di misure. Ho quindi pensato di creare un diagramma di Gantt; premetto che ho trovato alcuni pacchetti che permettono di realizzare questo tipo di diagrammi in Latex, ma escludendo quelli che si basano su pstricks, rimane pgfgantt che però non mi soddisfa a livello di layout

      Ho pensato di procedere manualmente con pgfplots per ricreare il layout che ho in mente

      excel_gantt

      Ho procedimento che ho seguito:
      1) Ho creato un file dati.txt (in allegato) che contiene 4 colonne:
      Nome Inizio Fine Giorni
      2) Ho creato un grafico xbar stacked
      3) Ho inserito come prima serie la colonna ‘Inizio’: in questo modo viene creata una barra tra il valore 0 e la data di inizio della misura. L’intenzione è quella di far sparire questa serie con `[draw=none,fill=none]`
      4) Vorrei inserire come seconda serie la colonna ‘Giorni’ in modo che la seconda barra sommi alla data di inizio della misura la durata in giorni della misura stessa. Ciò non sembra possibile perchè pgfplots gestisce le date nel formato: aaaa-mm-gg e non accetta esclusivamente un numero di giorni.

      La mia domanda è quindi:
      è possibile avere due distinti formati per due distinti \addplot: il primo `date coordinates in=x` e il secondo normale?
      In alternativa: come è possibile rendere il layout che ho in mente?

      Di seguito riporto un esempio minimale in cui però il secondo \addplot è basato sulla colonna ‘Fine’ e quindi il risultato finale è errato.
      `\documentclass{article}

      \usepackage{pgfplots}

      \usepgfplotslibrary{dateplot}

      \begin{document}

      \begin{tikzpicture}[%
      ]

      %Carica tabella da richiamare con \loadedtable
      \pgfplotstableread{dati.txt}\loadedtable

      \begin{axis}[
      % ASSE X
      xbar stacked,
      date coordinates in=x,
      xticklabel={\day-\month-\year},
      date ZERO=2009-01-01,
      x tick label style={rotate=45,anchor=east},
      % ASSE Y
      y dir=reverse,
      ytick=data,
      ylabel={Misure},
      % yticklabels from table={\loadedtable}{Nome},
      symbolic y coords={A,B,C,D},
      ]

      \addplot table[x=Inizio,y=Nome]{\loadedtable};

      \addplot table[x=Fine,y=Nome]{\loadedtable};

      \end{axis}

      \end{tikzpicture}

      \end{document}
      `

      Grazie in anticipo

      Andrea

      [attachment]C:\fakepath\excel_gantt.png[/attachment]

      [attachment]C:\fakepath\excel_gantt.png[/attachment]

      Attachments:
      You must be logged in to view attached files.
    Visualizzazione 18 filoni di risposte
    • Autore
      Risposte
      • #77881
        Up
        0
        Down
        ::


        non fai prima a creare il diagramma di GANTT con l’apposito tool (ganttproject o affini)?? io personalmente ho preferito il primo, che è anche free e multipiattaforma. salvi il diagramma in formato .png e lo carichi come immagine (se è troppo lungo ruoti l’immagine di 90 gradi) e il gioco è fatto 🙂

      • #77882
        Andrea
        Partecipante
          Up
          0
          Down
          ::


          Ti ringrazio,
          è la prima volta che mi cimento con questo tipo di diagrammi e non conoscevo il programma che mi hai indicato.

          Tuttavia cercavo una soluzione che mantenesse la coerenza grafica con il documento di latex. Se non la troverò, userò un programma esterno.

        • #77883
          Liverpool
          Partecipante
            Up
            0
            Down
            ::


            Se le misure non sono molte, come nell’esempio che proponi, io credo attualmente che la cosa migliore sia disegnare a mano le barre tramite i comandi di TikZ in ambiente pgfplots come di seguito:
            `\documentclass{article}
            \usepackage[svgnames]{xcolor}
            \usepackage{pgfplots}
            \usepgfplotslibrary{dateplot}
            \usetikzlibrary{shadings,shadows,fadings}

            \begin{document}
            \begin{tikzpicture}
            \tikzfading [name=dissolvenza, top color=transparent!0, bottom color=transparent!95]
            \tikzstyle{ripieno}=[top color=DodgerBlue, bottom color=RoyalBlue, general shadow={fill=black, shadow yshift=-0.8ex, path fading=dissolvenza}]
            \begin{axis} [xmin=2009-03-28, xmax=2012-07-10, y dir=reverse, date coordinates in=x, xmajorgrids=true,
            xtick={2009-03-28,2009-10-14,2010-05-02,2010-11-18,2011-06-06,2011-12-23,2012-07-10},
            xticklabel={\day-\month-\year}, x tick label style={rotate=45,anchor=east},
            ytick={1,2,3,4}, ylabel=Misure]

            \fill [ripieno] (axis cs:2009-04-29,0.7) rectangle (axis cs:2011-11-20,1.3);
            \fill [ripieno] (axis cs:2010-07-18,1.7) rectangle (axis cs:2012-01-18,2.3);
            \fill [ripieno] (axis cs:2009-04-29,2.7) rectangle (axis cs:2012-01-18,3.3);
            \fill [ripieno] (axis cs:2009-06-08,3.7) rectangle (axis cs:2012-01-18,4.3);

            \addplot [draw=none] coordinates {(2009-03-28,0.7) (2012-07-10,4.3)};
            \end{axis}
            \end{tikzpicture}
            \end{document}`
            Il comando [tt]\addplot[/tt] alla fine serve:
            1) perché è necessario disegnare qualcosa sulla tela, altrimenti il pacchetto sostituisce tutto con un riferimento vuoto;
            2) perché bisogna disegnare qualcosa di sufficientemente grande da far rientrare nella tela tutte le barre.

            [tt]axis cs[/tt] indica a TikkZ di usare le coordinate del sistema di riferimento di pgfplots.

            Si può prevedere qualche forma di automazione come l’uso di un ciclo o la definizione a priori dell’altezza dei rettangoli, ma per un disegno così breve non ne vedo l’utilità. Fammi sapere cosa ne pensi.

            Ciao

          • #77884
            Andrea
            Partecipante
              Up
              0
              Down
              ::


              Che dire…ottimo!! Ha grande impatto visivo, nonché la coerenza tipografica che cercavo.

              Ti ringrazio molto…

              Il problema che rimane è che in effetti le misure sono molte, io le ho ridotte per poter fornire un esempio minimo. In realtà ho 17 misure, ognuna delle quali si riferisce ad un edificio diverso. Sarebbe quindi utile poter automatizzare il tutto, almeno la lettura dei dati e delle etichette dell’asse y (i nomi degli edifici) da un file esterno del tipo:
              Nome edificio Inizio Fine

              Non so se tikz permetta la lettura da file esterni; nel caso non si possa valuterò se adottare la tua soluzione manuale o appoggiarmi ad un programma esterno.

              Grazie ancora

            • #77885
              Andrea
              Partecipante
                Up
                0
                Down
                ::


                Non avevo pensato al pacchetto datatool per leggere dati da un file esterno. Ho modificato il codice di Liverpool così
                `
                \documentclass{article}
                \usepackage{datatool}
                \usepackage[svgnames]{xcolor}
                \usepackage{pgfplots}
                \usepgfplotslibrary{dateplot}
                \usetikzlibrary{shadings,shadows,fadings}
                %\pgfplotsset{compat=1.6}

                \DTLloaddb[noheader=false]{misure}{dati.dat}

                \begin{document}
                \begin{tikzpicture}
                \tikzfading [name=dissolvenza, top color=transparent!0, bottom color=transparent!95]
                \tikzstyle{ripieno}=[top color=DodgerBlue, bottom color=RoyalBlue, general shadow={fill=black, shadow yshift=-0.8ex, path fading=dissolvenza}]

                \begin{axis} [xmin=2009-03-28, xmax=2012-07-10, y dir=reverse, date coordinates in=x, xmajorgrids=true,
                xtick={2009-03-28,2009-10-14,2010-05-02,2010-11-18,2011-06-06,2011-12-23,2012-07-10},
                xticklabel={\day-\month-\year}, x tick label style={rotate=45,anchor=east},
                ytick={1,2,3,4}, ylabel=Misure]

                \DTLforeach*{misure}{\start=inizio, \end=fine, \skip=i}{\fill [ripieno] (axis cs:\start,\skip.7) rectangle (axis cs:\end,\skip.3);}

                %\fill [ripieno] (axis cs:2009-04-29,0.7) rectangle (axis cs:2011-11-20,1.3);
                %\fill [ripieno] (axis cs:2010-07-18,1.7) rectangle (axis cs:2012-01-18,2.3);
                %\fill [ripieno] (axis cs:2009-04-29,2.7) rectangle (axis cs:2012-01-18,3.3);
                %\fill [ripieno] (axis cs:2009-06-08,3.7) rectangle (axis cs:2012-01-18,4.3);

                \addplot [draw=none] coordinates {(2009-03-28,0.7) (2012-07-10,4.3)};
                \end{axis}

                \end{tikzpicture}
                \end{document}
                `

                dove dati.dat è
                `i,inizio,fine
                1,2009-06-08,2012-01-18
                2,2009-04-29,2012-01-18
                3,2010-07-18,2012-01-18
                4,2009-04-29,2011-11-20
                `
                tuttavia non compila neanche abilitando
                `
                %\pgfplotsset{compat=1.6}
                `
                come suggerito da file log.

                Qualcuno ha idea del perché?

              • #77886
                Up
                0
                Down
                ::


                sperando di non andare troppo offtopic: ho compilato il primo codice e il risultato è una specie di istogramma capovolto… le cui date sono malposte e semi incomprensibili.
                io evitarei di usare simili “trucchi” preferendo ganttproject. quando crei il diagramma vedrai che spettacolo! se non altro chi lo legge ci può capire qualcosa … :mrgreen:

              • #77887
                Liverpool
                Partecipante
                  Up
                  0
                  Down
                  ::

                  Iovem” post=77153Qualcuno ha idea del perché?

                  Perché hai usato il comando [tt]\end[/tt] come etichetta per il disegno.

                  Ora c’è da risolvere un altro problema: non puoi dire [tt]\skip.7[/tt] sperando che TikZ lo interpreti come 1.7. Bisogna trovare il modo di sommare e sottrarre le ordinate in [tt]axis cs[/tt] ma non è così semplice perché ci sono di mezzo le date in ascissa. Finora ho provato, ma senza risultati. Spera che intervenga qualcuno più in gamba di me.

                  Ciao

                • #77888
                  Andrea
                  Partecipante
                    Up
                    0
                    Down
                    ::

                    Liverpool” post=77167

                    Qualcuno ha idea del perché?

                    Perché hai usato il comando [tt]\end[/tt] come etichetta per il disegno.

                    Hai ragione, ti ringrazio.

                    Però se il problema è solo la somma di 0.7 e 0.3, si possono spostare all’interno del file [tt]dati.dat[/tt] generando con excel, così:
                    `
                    left,right,inizio,fine
                    0.7,1.3,2009-06-08,2012-01-18
                    1.7,2.3,2009-04-29,2012-01-18
                    2.7,3.3,2010-07-18,2012-01-18
                    3.7,4.3,2009-04-29,2011-11-20
                    `
                    Quindi
                    `\documentclass{article}
                    \usepackage{datatool}
                    \usepackage[svgnames]{xcolor}
                    \usepackage{pgfplots}
                    \usepgfplotslibrary{dateplot}
                    \usetikzlibrary{shadings,shadows,fadings}
                    %\pgfplotsset{compat=1.6}

                    \DTLloaddb[noheader=false]{misure}{dati.dat}

                    \begin{document}
                    \begin{tikzpicture}
                    \tikzfading [name=dissolvenza, top color=transparent!0, bottom color=transparent!95]
                    \tikzstyle{ripieno}=[top color=DodgerBlue, bottom color=RoyalBlue, general shadow={fill=black, shadow yshift=-0.8ex, path fading=dissolvenza}]

                    \begin{axis} [xmin=2009-03-28, xmax=2012-07-10, y dir=reverse, date coordinates in=x, xmajorgrids=true,
                    xtick={2009-03-28,2009-10-14,2010-05-02,2010-11-18,2011-06-06,2011-12-23,2012-07-10},
                    xticklabel={\day-\month-\year}, x tick label style={rotate=45,anchor=east},
                    ytick={1,2,3,4}, ylabel=Misure]

                    \DTLforeach*{misure}{\start=inizio, \fine=fine, \l=left, \r=right}{\fill [ripieno,] (axis cs:\start,\l) rectangle (axis cs:\fine,\r);}

                    %\fill [ripieno] (axis cs:2009-04-29,0.7) rectangle (axis cs:2011-11-20,1.3);
                    %\fill [ripieno] (axis cs:2010-07-18,1.7) rectangle (axis cs:2012-01-18,2.3);
                    %\fill [ripieno] (axis cs:2009-04-29,2.7) rectangle (axis cs:2012-01-18,3.3);
                    %\fill [ripieno] (axis cs:2009-06-08,3.7) rectangle (axis cs:2012-01-18,4.3);

                    \addplot [draw=none] coordinates {(2009-03-28,0.7) (2012-07-10,4.3)};
                    \end{axis}

                    \end{tikzpicture}
                    \end{document}`

                    Tuttavia il loop non sembra funzionare correttamente.

                  • #77889
                    Liverpool
                    Partecipante
                      Up
                      0
                      Down
                      ::

                      Iovem” post=77168Tuttavia il loop non sembra funzionare correttamente.

                      In che senso? Scusa la domanda sciocca, ma sono riuscito a superare il problema della somma di coordinate però ottengo tutte le barre sovrapposte all’ultima. Vorrei sapere se hai lo stesso problema senza ricompilare tutto, perché in quel caso dovremmo concentrarci sul ciclo e non sulle istruzioni del disegno.

                    • #77890
                      Andrea
                      Partecipante
                        Up
                        0
                        Down
                        ::


                        Ho modificato così il file esterno
                        `left,right,inizio,fine
                        0.7,1.3,2009-11-08,2012-01-18
                        1.7,2.3,2009-04-29,2012-01-18
                        2.7,3.3,2010-11-18,2012-01-18
                        3.7,4.3,2010-04-29,2011-11-20`
                        in modo da avere una situazione più chiara.

                        Di fatto il ciclo disegna SOLO l’ultima riga [tt]3.7,4.3,2010-04-29,2011-11-20[/tt]

                      • #77891
                        Up
                        0
                        Down
                        ::

                        Iovem” post=77168Tuttavia il loop non sembra funzionare correttamente.

                        Forse mi sbaglio, ma dalla documentazione di datatool mi sembra che la sintassi del ciclo sia un po’ diversa rispetto a quella che hai usato tu:

                        `\DTLforeach[〈conditions〉]{〈db name〉}{〈values〉}{〈text〉}`

                        Ricordati che in alternativa puoi evitare di usare datatool ma pgfplotstable per leggere il file .dat.

                        Ciao
                        Claudio

                      • #77892
                        Andrea
                        Partecipante
                          Up
                          0
                          Down
                          ::


                          La sintassi l’ho copiata da qui.

                          Per pgfplotstable pensavo di poterlo usare solo per passare istruzioni ad [tt]\addplot[/tt], non ai comandi di Tikz.

                        • #77893
                          Liverpool
                          Partecipante
                            Up
                            0
                            Down
                            ::


                            Da quello che ho visto, sono i comandi di TikZ che danno problemi, perché se provi con [tt]\addplot coordinates {(\inizio,\skip)};[/tt] funziona correttamente.

                            P.S.: ora è chiaro perché nel primo messaggio avevo detto che per un elenco così breve sarebbe stato più semplice procedere manualmente…

                          • #77894
                            Liverpool
                            Partecipante
                              Up
                              0
                              Down
                              ::


                              Ora devo sospendere. Nel frattempo ti mostro il codice con i vertici del rettangolo calcolati automaticamente. Il file dati.dat è quello con la colonna i soltanto. Noterai che la semialtezza del rettangolo è stata definita a parte in modo da poterla modificare rapidamente in un secondo tempo. La riga con \DTLcurrentindex serve solo per mostrare che in realtà il ciclo stampa 4 volte la stessa istruzione con \skip=4. E’ stato necessario impostare lo zero (28/3/2009) in modo da poter utilizzare gli spostamenti relativi.

                              `\documentclass{article}
                              \usepackage{datatool}
                              \usepackage[svgnames]{xcolor}
                              \usepackage{pgfplots}
                              \usepgfplotslibrary{dateplot}
                              \usetikzlibrary{shadings,shadows,fadings,calc}
                              %\pgfplotsset{compat=1.6}

                              \DTLloaddb[noheader=false]{misure}{dati.dat}

                              \begin{document}
                              \begin{tikzpicture}
                              \tikzfading [name=dissolvenza, top color=transparent!0, bottom color=transparent!95]
                              \tikzstyle{ripieno}=[top color=DodgerBlue, bottom color=RoyalBlue, general shadow={fill=black, shadow yshift=-0.8ex, path fading=dissolvenza}]
                              \def\h{0.3} % semialtezza del rettangolo

                              \begin{axis} [xmin=2009-03-28, xmax=2012-07-10, y dir=reverse, xmajorgrids=true,
                              date coordinates in=x, date ZERO=2009-03-28,
                              xtick={2009-03-28,2009-10-14,2010-05-02,2010-11-18,2011-06-06,2011-12-23,2012-07-10},
                              xticklabel={\day-\month-\year}, x tick label style={rotate=45,anchor=east},
                              ytick={1,2,3,4}, ylabel=Misure]

                              \DTLforeach*{misure}%
                              {\skip=i,\inizio=inizio,\fine=fine}%
                              {\fill [ripieno] (axis cs:\inizio,\skip) ++ (axis direction cs:2009-03-28,-\h)
                              rectangle ($(axis cs:\fine,\skip) + (axis direction cs:2009-03-28,\h)$);
                              \draw (axis cs:2010-01-01,2) node {\DTLcurrentindex};} % riga di prova

                              %\fill [ripieno] (axis cs:2009-04-29,0.7) rectangle (axis cs:2011-11-20,1.3);
                              %\fill [ripieno] (axis cs:2010-07-18,1.7) rectangle (axis cs:2012-01-18,2.3);
                              %\fill [ripieno] (axis cs:2009-04-29,2.7) rectangle (axis cs:2012-01-18,3.3);
                              %\fill [ripieno] (axis cs:2009-06-08,3.7) rectangle (axis cs:2012-01-18,4.3);

                              \addplot [draw=none] coordinates {(2009-03-28,0.7) (2012-07-10,4.3)};
                              \end{axis}
                              \end{tikzpicture}
                              \end{document}`

                            • #77895
                              Liverpool
                              Partecipante
                                Up
                                0
                                Down
                                ::


                                Problema risolto. La spiegazione è a pag. 359 (par. 8.1) del manuale di pgfplots, nel capoverso che inizia con keep in mind.
                                Ti allego il codice realizzato con datatool e quello realizzato con pgfplotstable, come suggerito da Claudio. Scegli tu la soluzione che ti piace di più.
                                Fammi sapere se ci sono altri problemi.
                                `\documentclass{article}
                                \usepackage{datatool}
                                \usepackage[svgnames]{xcolor}
                                \usepackage{pgfplots}
                                \usepgfplotslibrary{dateplot}
                                \usetikzlibrary{shadings,shadows,fadings,calc}

                                \DTLloaddb[noheader=false]{misure}{dati.dat}

                                \begin{document}
                                \begin{tikzpicture}
                                \tikzfading [name=dissolvenza, top color=transparent!0, bottom color=transparent!95]
                                \tikzstyle{ripieno}=[top color=DodgerBlue, bottom color=RoyalBlue, general shadow={fill=black, shadow yshift=-0.8ex, path fading=dissolvenza}]
                                \def\h{0.3} % semialtezza del rettangolo

                                \begin{axis} [xmin=2009-03-28, xmax=2012-07-10, y dir=reverse, xmajorgrids=true,
                                date coordinates in=x, date ZERO=2009-03-28,
                                xtick={2009-03-28,2009-10-14,2010-05-02,2010-11-18,2011-06-06,2011-12-23,2012-07-10},
                                xticklabel={\day-\month-\year}, x tick label style={rotate=45,anchor=east},
                                ytick={1,2,3,4}, ylabel=Misure]

                                \DTLforeach*{misure}%
                                {\skip=i,\inizio=inizio,\fine=fine}%
                                {\edef\temp{
                                \noexpand
                                \fill [ripieno] (axis cs:\inizio,\skip) ++ (axis direction cs:2009-03-28,-\h)
                                rectangle ($(axis cs:\fine,\skip) + (axis direction cs:2009-03-28,\h)$);}
                                \temp}

                                \addplot [draw=none] coordinates {(2009-03-28,0.7) (2012-07-10,4.3)};
                                \end{axis}
                                \end{tikzpicture}
                                \end{document}`
                                `\documentclass{article}
                                \usepackage[svgnames]{xcolor}
                                \usepackage{pgfplots}
                                \usepgfplotslibrary{dateplot}
                                \usetikzlibrary{shadings,shadows,fadings,calc}

                                \pgfplotstableread{dati.dat}{\misure}
                                \pgfplotstablegetrowsof{\misure}
                                \pgfmathsetmacro{\righe}{\pgfplotsretval-1}

                                \begin{document}
                                \begin{tikzpicture}
                                \tikzfading [name=dissolvenza, top color=transparent!0, bottom color=transparent!95]
                                \tikzstyle{ripieno}=[top color=DodgerBlue, bottom color=RoyalBlue, general shadow={fill=black, shadow yshift=-0.8ex, path fading=dissolvenza}]
                                \def\h{0.3} % semialtezza del rettangolo

                                \begin{axis} [xmin=2009-03-28, xmax=2012-07-10, y dir=reverse, xmajorgrids=true,
                                date coordinates in=x, date ZERO=2009-03-28,
                                xtick={2009-03-28,2009-10-14,2010-05-02,2010-11-18,2011-06-06,2011-12-23,2012-07-10},
                                xticklabel={\day-\month-\year}, x tick label style={rotate=45,anchor=east},
                                ytick={1,2,3,4}, ylabel=Misure]

                                \foreach \i in {0,…,\righe}
                                {
                                \pgfplotstablegetelem{\i}{i}\of\misure
                                \let\skip\pgfplotsretval
                                \pgfplotstablegetelem{\i}{inizio}\of\misure
                                \let\inizio\pgfplotsretval
                                \pgfplotstablegetelem{\i}{fine}\of\misure
                                \let\fine\pgfplotsretval
                                \edef\temp{
                                \noexpand
                                \fill [ripieno] (axis cs:\inizio,\skip) ++ (axis direction cs:2009-03-28,-\h)
                                rectangle ($(axis cs:\fine,\skip) + (axis direction cs:2009-03-28,\h)$);}
                                \temp
                                }

                                \addplot [draw=none] coordinates {(2009-03-28,0.7) (2012-07-10,4.3)};
                                \end{axis}
                                \end{tikzpicture}
                                \end{document}`

                              • #77896
                                Andrea
                                Partecipante
                                  Up
                                  0
                                  Down
                                  ::


                                  Ti ringrazio molto per il tempo e lo sforzo che hai dedicato al mio problema, il risultato è eccellente.

                                  Ho imparato molti aspetti nuovi di [tt]pgfplots[/tt] e mi riprometto di leggere più a fondo il manuale.

                                  Posto il codice definitivo a cui ho aggiunto le misure mancanti e le etichette dell’asse y da una nuova colonna del file [tt]data.dat[/tt]
                                  `
                                  \documentclass{article}
                                  \usepackage[svgnames]{xcolor}
                                  \usepackage{pgfplots}
                                  \usepgfplotslibrary{dateplot}
                                  \usetikzlibrary{shadings,shadows,fadings,calc}

                                  \pgfplotsset{height=12cm,width=10cm}

                                  \pgfplotstableread{data.dat}{\misure}
                                  \pgfplotstablegetrowsof{\misure}
                                  \pgfmathsetmacro{\righe}{\pgfplotsretval-1}

                                  \begin{document}
                                  \begin{tikzpicture}
                                  \tikzfading [name=dissolvenza, top color=transparent!0, bottom color=transparent!95]
                                  \tikzstyle{ripieno}=[top color=DodgerBlue, bottom color=RoyalBlue, general shadow={fill=black, shadow yshift=-0.8ex, path fading=dissolvenza}]
                                  \def\h{0.3} % semialtezza del rettangolo

                                  \begin{axis} [xmin=2009-03-28, xmax=2012-07-10, y dir=reverse, xmajorgrids=true,
                                  date coordinates in=x, date ZERO=2009-03-28,
                                  xtick={2009-03-28,2009-10-14,2010-05-02,2010-11-18,2011-06-06,2011-12-23,2012-07-10},
                                  xticklabel={\day-\month-\year}, x tick label style={rotate=45,anchor=east},
                                  ytick={1,2,3,…,17},
                                  yticklabels from table={data.dat}{nome},
                                  ylabel=Misure,
                                  ]

                                  \foreach \i in {0,…,\righe}
                                  {
                                  \pgfplotstablegetelem{\i}{i}\of\misure
                                  \let\skip\pgfplotsretval
                                  \pgfplotstablegetelem{\i}{inizio}\of\misure
                                  \let\inizio\pgfplotsretval
                                  \pgfplotstablegetelem{\i}{fine}\of\misure
                                  \let\fine\pgfplotsretval
                                  \edef\temp{
                                  \noexpand
                                  \fill [ripieno] (axis cs:\inizio,\skip) ++ (axis direction cs:2009-03-28,-\h)
                                  rectangle ($(axis cs:\fine,\skip) + (axis direction cs:2009-03-28,\h)$);}
                                  \temp
                                  }

                                  \addplot [draw=none] coordinates {(2009-03-28,1.5) (2012-07-10,16.5)};
                                  \end{axis}
                                  \end{tikzpicture}
                                  \end{document}`
                                  il file [tt]data.dat[/tt]:
                                  `nome i inizio fine
                                  E.1 1 2009-06-08 2012-01-18
                                  E.2 2 2009-04-29 2012-01-18
                                  E.3 3 2010-07-18 2012-01-18
                                  E.4 4 2009-04-29 2011-11-20
                                  E.5 5 2009-12-14 2012-01-09
                                  E.6 6 2010-06-21 2010-09-20
                                  E.7 7 2009-06-19 2012-01-05
                                  E.8 8 2009-04-29 2011-08-16
                                  E.9 9 2010-06-21 2010-09-20
                                  E.10 10 2009-04-29 2011-08-15
                                  E.11 11 2009-04-29 2011-10-20
                                  C.1 12 2009-04-29 2010-07-28
                                  D.1 13 2009-04-29 2012-01-18
                                  E.12 14 2009-04-29 2012-01-16
                                  E.13 15 2009-04-27 2011-08-16
                                  E.14 16 2009-04-27 2012-01-16
                                  E.15 17 2010-06-21 2010-09-20`

                                  OT: se posso abusare abusare ancora delle tua pazienza, e di quella degli altri che vorranno rispondere…. lo stile applicato a [tt]\fill[/tt] lo hai creato tu? Hai tratto ispirazione da qualcosa in particolare? Sapresti consigliarmi un effetto simile (anche senza le ombre, bastano le sfumature) da applicare ad altri colori (es: rosso,verde,arancio) in modo da dare lo stesso aspetto ad istogrammi con più serie di dati?

                                  Se credete che la domanda meriti un nuovo post sarò lieto di crearne uno.

                                  Grazie ancora e buona serata

                                  Andrea

                                • #77897
                                  Up
                                  0
                                  Down
                                  ::

                                  Iovem” post=77186OT: se posso abusare abusare ancora delle tua pazienza, e di quella degli altri che vorranno rispondere…. lo stile applicato a [tt]\fill[/tt] lo hai creato tu? Hai tratto ispirazione da qualcosa in particolare? Sapresti consigliarmi un effetto simile (anche senza le ombre, bastano le sfumature) da applicare ad altri colori (es: rosso,verde,arancio) in modo da dare lo stesso aspetto ad istogrammi con più serie di dati?

                                  Si lo stile è opera di Liverpool! Ecco il relativo codice:

                                  `\tikzfading [name=dissolvenza, top color=transparent!0, bottom color=transparent!95]
                                  \tikzstyle{ripieno}=[top color=DodgerBlue, bottom color=RoyalBlue, general shadow={fill=black, shadow yshift=-0.8ex, path fading=dissolvenza}]`

                                  A te interessa definire una nuova [tt]colormap[/tt]? Per intenderci guarda la documentazione: 4.6.6 Color Maps e 5.2 Colormaps.

                                  Ciao
                                  Claudio

                                • #77898
                                  Liverpool
                                  Partecipante
                                    Up
                                    0
                                    Down
                                    ::

                                    Iovem” post=77186lo stile applicato a [tt]\fill[/tt] lo hai creato tu? Hai tratto ispirazione da qualcosa in particolare? Sapresti consigliarmi un effetto simile (anche senza le ombre, bastano le sfumature) da applicare ad altri colori (es: rosso,verde,arancio) in modo da dare lo stesso aspetto ad istogrammi con più serie di dati?

                                    Lo stile l’ho realizzato cercando di riprodurre l’immagine di excel che hai inserito all’inizio della conversazione (che ora è cambiata), come da tua richiesta. Guardando il risultato sul grafico completo, forse le ombre sono un po’ troppo lunghe. Per le sfumature di colore, ho semplicemente scelto due tonalità di azzurro dal manuale di xcolor nel paragrafo 4.3 a pag. 38. Se vuoi provare altri colori, devi solo sostituire gli originali in [tt]top color[/tt] e [tt]bottom color[/tt] nelle riga di tikzstyle.
                                    Per esempio, sul rosso potresti provare [tt]FireBrick!70[/tt] (un po’ più chiaro di FireBrick) + [tt]DarkRed[/tt]; però così le ombre grigie non stanno benissimo, allora sostituisci il black dopo il fill con [tt]DarkRed!80!Black[/tt] (un po’ più rosso che nero).
                                    Con il rosa prova [tt]LightSalmon[/tt] + [tt]DarkSalmon!70!DarkRed[/tt].
                                    Con il verde: [tt]YellowGreen!70!SeaGreen[/tt] + [tt]ForestGreen[/tt] e per l’ombra [tt]ForestGreen!80!Black[/tt].
                                    Insomma: fa un po’ di tentativi. Dipende molto dal gusto personale.

                                    Ciao

                                  • #77899
                                    Andrea
                                    Partecipante
                                      Up
                                      0
                                      Down
                                      ::


                                      Quindi lo stile era un Liverpool originale 🙂

                                      Ti ringrazio per i consigli, farò delle prove…

                                      Grazie di tutto

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

                                  Go to top