[Parzialmente risolto] Assi multipli con pgfplots

  • Creatore
    Topic
  • #52102
    Daniele
    Partecipante
      Up
      0
      Down
      ::


      Rieccomi all’attacco,
      ho provato a cercare “assi pgfplots” sul forum ma non ho trovato niente. Ho fatto passare i vari esempio del manuale di pgfplots, ma anche lì niente. Quindi chiedo a voi.
      Dovrei disegnare un grafico con due curve: una sul piano xy, l’altra sul piano xy’, con y’ disegnato sul lato destro del grafico. Cercando in rete ho trovato un esempio di quello che voglio fare. Lo vedete sul link:
      http://i.msdn.microsoft.com/ee291567.Petzold.Extreme.Fig5%28en-us,MSDN.10%29.png

      Grazie e buon lavoro a tutti,
      Daniele

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

          Rieccomi all’attacco,
          ho provato a cercare “assi pgfplots” sul forum ma non ho trovato niente. Ho fatto passare i vari esempio del manuale di pgfplots, ma anche lì niente. Quindi chiedo a voi.
          Dovrei disegnare un grafico con due curve: una sul piano xy, l’altra sul piano xy’, con y’ disegnato sul lato destro del grafico. Cercando in rete ho trovato un esempio di quello che voglio fare. Lo vedete sul link:
          http://i.msdn.microsoft.com/ee291567.Petzold.Extreme.Fig5%28en-us,MSDN.10%29.png

          Grazie e buon lavoro a tutti,
          Daniele

          Solo un’idea che potrebbe anche non funzionare:
          Potresti disegnare la seconda curva opportunamente traslata secondo l’asse y e poi disegnare a mano i tick di scala a destra sull’asse y attraverso i nodi e le proprietà cs tipo (preso al volo dal manuale):
          `\node[small dot,pin=-90:{$0.5$}] at (axis description cs:1.03,0.5) {};`

          Non credo sia una cosa comune plottare curve sovrapposte di differenti scale sullo stesso grafico, pertanto è normale che pfgplots non le rammenti (almeno così mi pare).

          Ciao.

        • #52104
          franen
          Partecipante
            Up
            0
            Down
            ::


            Prova a guardare la sezione 4.8.10 del manuale.

            Francesco

          • #52105
            Daniele
            Partecipante
              Up
              0
              Down
              ::


              😳
              E sì che praticamente il titolo di quella sezione è uguale a quello che ho dato al topic… Mi spiace, l’esempio mi era sfuggito. Sarei curioso di sapere, franen, se l’avevi già visto o se l’hai cercato apposta, nel qual caso la domanda è: come hai fatto a trovarlo? Hai semplicemente cercato “multiple axes”?

              Grazie ancora,
              Daniele

            • #52106
              franen
              Partecipante
                Up
                0
                Down
                ::


                Sapevo che c’era perché l’avevo cercato poco tempo fa. Per ritrovarlo però ho dovuto spulciare le immagini del manuale… non ricordavo con che titolo fosse inserito l’esempio in questione.

                Francesco

              • #52107
                Daniele
                Partecipante
                  Up
                  0
                  Down
                  ::


                  Sono riuscito a inserire gli assi multipli, però ho ancora almeno due problemi (“almeno” in quanto matematicamente non ho dimostrato siano gli unici… sono gli unici noti :D).

                  1) Anche compilando il secondo esempio di pagina 133 del manuale, la label dell’asse y (“per thousand”) non è nel posto giusto ma sovrapposta all’etichetta dell’asse y di sinistra;

                  2) Voglio una legenda che raccolga le curve disegnate nei due ambienti axis. Usando \addlegendentry{—} per ogni curva mi crea due legende separate che, se nella stessa posizione, ovviamente si sovrappongono.

                  Spero che qualcuno abbia idea di come si risolvano questi problemi.

                  Grazie,
                  Daniele

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

                    Sono riuscito a inserire gli assi multipli, però ho ancora almeno due problemi (“almeno” in quanto matematicamente non ho dimostrato siano gli unici… sono gli unici noti :D).

                    1) Anche compilando il secondo esempio di pagina 133 del manuale, la label dell’asse y (“per thousand”) non è nel posto giusto ma sovrapposta all’etichetta dell’asse y di sinistra;

                    2) Voglio una legenda che raccolga le curve disegnate nei due ambienti axis. Usando \addlegendentry{—} per ogni curva mi crea due legende separate che, se nella stessa posizione, ovviamente si sovrappongono.

                    Spero che qualcuno abbia idea di come si risolvano questi problemi.

                    Grazie,
                    Daniele

                    Scusate ma nel mio manuale il paragrafo 4.8.10 citato non riguarda affatto un doppio sistema sull’asse y. 😀

                    Evidentemente dovrò passare alla TeX Live 2010 su tutte le mie macchine, altrimenti non potrò consultare i nuovi sviluppi.

                    Scusate ancora.
                    Ciao

                  • #52109
                    Daniele
                    Partecipante
                      Up
                      0
                      Down
                      ::

                      Scusate ma nel mio manuale il paragrafo 4.8.10 citato non riguarda affatto un doppio sistema sull’asse y. 😀
                      […]
                      Scusate ancora.

                      Ci mancherebbe, anzi, intanto ti ringrazio per aver dedicato tempo al problema. A tal proposito, tra l’altro, per far risparmiare tempo a chi volesse cimentarsi, riporto un esempio minimo compilabile. È quello che ho citato nel mio ultimo messaggio prima di questo.
                      `\documentclass[11pt,a4paper]{report}

                      \usepackage[T1]{fontenc}
                      \usepackage[latin1]{inputenc}
                      \usepackage[italian]{babel}
                      \usepackage{pgfplots}

                      \begin{document}

                      \begin{tikzpicture}
                      \begin{axis}[
                      scale only axis,
                      xmin=-5,xmax=5,
                      axis y line*=left,% the '*' avoids arrow heads
                      xlabel=$x$,
                      ylabel=First ordinate]
                      \addplot coordinates{
                      (-5,-3)
                      (5,3)
                      };
                      \end{axis}
                      \begin{axis}[
                      scale only axis,
                      xmin=-5,xmax=5,
                      axis y line*=right,
                      axis x line=none,
                      ylabel=Second ordinate]
                      \addplot[red] coordinates{
                      (-1,1)
                      (5,2)
                      };
                      \end{axis}
                      \end{tikzpicture}

                      \end{document}`

                      Tra l’altro non riesco a capire dove viene detto a pgfplots di usare dei marker per la linea blu.

                      Grazie ancora,
                      Daniele

                      PS Vi invito anche a provare a creare una legenda unica per le due curve (cioè una legenda con le due voci)… banale???

                    • #52110
                      Up
                      0
                      Down
                      ::

                      Tra l’altro non riesco a capire dove viene detto a pgfplots di usare dei marker per la linea blu.

                      Credo sia dovuto al fatto che per la linea rossa viene specificata almeno una opzione al comando \addplot e quindi pgfplots si attiene a quella, invece per la blu non ci sono opzioni e quindi il pacchetto utilizza quelle che lui inserisce di default. Comunque per eliminare i marker basta usare l’opzione “no markers”.

                      Ciao
                      Fra

                    • #52111
                      Up
                      0
                      Down
                      ::


                      Riporto qui la soluzione che ho proposto a Daniele86 tramite mp per il primo problema, cioè quello di avere le due etichette sovrapposte.
                      Questo è dovuto all’opzione ” axis y line* ” ed in particolare alla sua versione asteriscata. Infatti togliendo l’asterisco si hanno le due etichette sugli assi y al loro posto. Questo produce l’inconveniente di avere l’asse y destro con la freccia finale e non come box. Per ovviare a ciò si può definire a mano lo stile dell’asse y tramite l’opzione
                      `y axis line style={-}`
                      Quindi il codice di prova diventa
                      `\documentclass[11pt,a4paper]{report}

                      \usepackage[T1]{fontenc}
                      \usepackage[latin1]{inputenc}
                      \usepackage[italian]{babel}
                      \usepackage{pgfplots}

                      \begin{document}

                      \begin{tikzpicture}
                      \begin{axis}[
                      scale only axis,
                      xmin=-5,xmax=5,
                      axis y line*=left,% the '*' avoids arrow heads
                      xlabel=$x$,
                      ylabel=First ordinate]
                      \addplot coordinates{
                      (-5,-3)
                      (5,3)
                      };
                      \end{axis}
                      \begin{axis}[
                      scale only axis,
                      xmin=-5,xmax=5,
                      axis y line=right,
                      axis x line=none,
                      ylabel=Second ordinate,y axis line style={-}]
                      \addplot[red] coordinates{
                      (-1,1)
                      (5,2)
                      };
                      \end{axis}
                      \end{tikzpicture}
                      \end{document}`

                      Ciao
                      Fra

                    • #52112
                      Daniele
                      Partecipante
                        Up
                        0
                        Down
                        ::


                        Ho trovato un espediente per sistemare parzialmente anche il problema dalla legenda. Ne creo due che nel mio caso posiziono fuori dal grafico con il codice
                        ` legend style={
                        at={(0.01,1.01)},
                        anchor=south west
                        }`
                        e
                        ` legend style={
                        at={(0.99,1.01)},
                        anchor=south east
                        }`
                        da inserire nelle opzioni degli assi.

                        Se qualcuno conosce un modo per creare una legenda unica dica pure.

                        Ciao,
                        Daniele

                      • #52113
                        Up
                        0
                        Down
                        ::


                        Ciao,
                        Provo a riesumare questo post perché mi trovo nella stessa situazione dell’autore del post.
                        Guardando il manuale di pgfplots non sono riuscito a venirne a capo: qualcuno sa come si fa a inserire un’unica legenda per curve con differenti assi delle ordinate?

                        Grazie
                        Marco

                      • #52114
                        Up
                        0
                        Down
                        ::

                        Daniele86″ post=50948Se qualcuno conosce un modo per creare una legenda unica dica pure.

                        Penso di aver trovato una soluzione.
                        Riporto la soluzione che ho adottato, il codice non è molto ordinato e si potrebbe ottimizzare ma per ora va bene così:
                        `\documentclass[]{standalone}
                        \usepackage[T1]{fontenc}
                        \usepackage{textcomp}
                        \usepackage[utf8]{inputenc}
                        \usepackage[italian]{babel}
                        \usepackage[output-decimal-marker={,}]{siunitx}
                        \usepackage[]{pgfplots}
                        \pgfplotsset{/pgf/number format/use comma,compat=newest}
                        \begin{document}

                        \begin{tikzpicture}
                        \pgfplotsset{title style={at={(0.5,1.07)}}}
                        \pgfplotsset{every axis legend/.append style={at={(0.5,1.01)},anchor=south}}
                        \begin{axis} [ scale only axis,
                        axis y line*=left,
                        grid=major,
                        xlabel={Data e ora},
                        ylabel={Velocità down-load (Mib)},
                        title={\textbf{Rilievo velocità internet}},
                        width=10cm, height=7cm]
                        \addplot+ [thick,cyan,smooth] file {data_down.txt};
                        \label{Dplot}
                        \end{axis}
                        \begin{axis} [ scale only axis,
                        axis x line=none,
                        axis y line*=right,
                        ylabel={Velocità up-load (Mib)},
                        width=10cm, height=7cm,
                        legend style={draw=none},
                        legend cell align=left,
                        legend columns={2}]
                        \addlegendimage{/pgfplots/refstyle=Dplot}\addlegendentry{Down-load}
                        \addplot+ [thick,orange,smooth,mark=*,mark options={fill=red}] file{data_up.txt};
                        \addlegendentry{Up-load}
                        \end{axis}
                        \end{tikzpicture}
                        \end{document}`

                        [attachment=921]Grafico_latex.pdf[/attachment]

                        [attachment=922]Grafico_latex.tex[/attachment]

                        [attachment=923]data_up.txt[/attachment]

                        [attachment=924]data_down.txt[/attachment]

                        Attachments:
                        You must be logged in to view attached files.
                    Visualizzazione 11 filoni di risposte
                    • Devi essere connesso per rispondere a questo topic.

                    Go to top▲