[Parzialmente risolto] Assi multipli con pgfplots

  • Creatore
    Topic
  • #52102
    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
          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
            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
              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
              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