Due problemini con pgfplots

  • Creatore
    Topic
  • #110731
    lorenzo.pantieri
    Partecipante
      Up
      0
      Down
      ::


      Ciao a tutti! Il seguente codice mi dà due problemi.
      `\documentclass{article}

      \usepackage[dvipsnames]{xcolor}
      \usepackage{pgfplots}

      \begin{document}

      \begin{tikzpicture}[font=\small]
      \begin{axis} [width=0.75\textwidth,
      grid,
      axis lines=middle,
      xmin=0,xmax=100,ymin=0,ymax=300,
      xtick={0,20,40,60,80,100},
      ytick={0,20,60,100,140,180,220,260,300},
      xlabel=temperatura (°C),
      ylabel=Solubilità (g soluto/$100$ g acqua)]

      \draw [very thick,blue] (0,180) parabola (60, 300);
      \draw [very thick,red] (0,30) parabola (100, 60);
      \draw [very thick,Green] (0,10) parabola (100, 260);

      \node [text width=2.0cm,align=center,above] at (axis cs:60,300) {saccarosio};
      \node [text width=2.0cm,align=center,above] at (axis cs:100,260) {nitrato \\ di potassio};
      \node [text width=2.0cm,align=center,above] at (axis cs:100,60) {cloruro \\ di potassio};

      \end{axis}
      \end{tikzpicture}

      \end{document}`
      1. Le scritte “saccarosio”, “nitrato di potassio” e “cloruro di potassio” sono tagliate. Ora, per vederle potrei aumentare xmax e ymax, ma così facendo cambierei anche la griglia, che invece mi va benissimo così com’è. Insomma, io vorrei l’immagine com’è ora, con in più le scritte.

      2. Come fare a gestire l’etichetta sull’asse y? Due idee:
      – la mando a capo dopo “Solubilità”;
      – la scrivo a sinistra dell’asse y, ruotata di 90 gradi.
      Tuttavia, non so come farlo.

      Grazie in anticipo.
      Lorenzo

    Visualizzazione 4 filoni di risposte
    • Autore
      Risposte
      • #110732
        lorenzo.pantieri
        Partecipante
          Up
          0
          Down
          ::


          `\documentclass{article}

          \usepackage[applemac]{inputenc}

          \usepackage[dvipsnames]{xcolor}
          \usepackage{pgfplots}

          \begin{document}

          \begin{figure}
          \centering
          \begin{tikzpicture}[font=\small]
          \begin{axis} [width=0.75\textwidth,
          grid,
          axis lines=middle,
          xmin=0,xmax=100,ymin=0,ymax=300,
          xtick={0,20,40,60,80,100},
          ytick={0,20,60,100,140,180,220,260,300},
          xlabel=temperatura (°C),
          ]

          \draw [very thick,blue] (0,180) parabola (60, 300);
          \draw [very thick,red] (0,30) parabola (100, 60);
          \draw [very thick,Green] (0,10) parabola (100, 260);

          \end{axis}

          \node [text width=2.0cm,align=center] at (4.5,6.6) {saccarosio};
          \node [text width=2.0cm,align=center] at (7.5,5.9) {nitrato \\ di potassio};
          \node [text width=2.0cm,align=center] at (7.5,1.7) {cloruro \\ di potassio};

          \node [text width=3.5cm,align=left,left] at (3.75,6.0) {Solubilità \\ (g soluto/$100$ g acqua)};

          \end{tikzpicture}
          \caption{Curve di solubilità di alcune sostanze}
          \label{fig:curvesolubilita}
          \end{figure}

          \end{document}`
          È una soluzione poco ortodossa: uso dei \node fuori dall’ambiente axis, ma funziona.

          Se avete idee più eleganti, sono qui!

        • #110733
          LuglioM26
          Partecipante
            Up
            0
            Down
            ::


            Ciao direi con lo stesso codice dell’altro post:

            `
            \pgfplotsset{
            after end axis/.code={
            \node [text width=2.0cm,align=center,above] at (axis cs:60,300) {saccarosio};
            \node [text width=2.0cm,align=center,above] at (axis cs:100,260) {nitrato \\ di potassio};
            \node [text width=2.0cm,align=center,above] at (axis cs:100,60) {cloruro \\ di potassio};
            }
            }
            `

            Stefano

          • #110734
            Up
            0
            Down
            ::


            Ciao Lorenza, ti propongo una versione alternativa
            `
            \documentclass{article}

            \usepackage[italian]{babel}
            \usepackage[dvipsnames]{xcolor}
            \usepackage{pgfplots}
            \pgfplotsset{compat=1.8}
            \begin{document}

            \begin{tikzpicture}[font=\small]
            \begin{axis} [width=0.75\textwidth,
            grid,
            %axis lines=middle,
            xmin=0,xmax=100,ymin=0,ymax=300,
            xtick={0,20,40,60,80,100},
            ytick={0,20,60,100,140,180,220,260,300},
            xlabel=temperatura (°C),
            ylabel=Solubilità (g soluto/$100$ g acqua)]

            \addplot[very thick,blue,domain=0:60]{1/30*x^2+180} node[above,sloped,pos=.5]{saccarosio};
            \addplot[very thick,red,domain=0:100]{.003*x^2+30} node[align=center,sloped,above,pos=.8]{nitrato \\ di potassio};
            \addplot[very thick,Green,domain=0:100]{.025*x^2+10} node[align=center,sloped,above,pos=.5]{nitrato \\ di potassio};
            \end{axis}
            \end{tikzpicture}

            \end{document}
            `
            Come vedi, essendo parabole, le ho direttamente calcolate con [tt]pgfplots[/tt]. In questo modo le label possono essere poste in qualsiasi punto del path costruito con la chiave [tt]pos[/tt], in più sono automaticamente dello stesso colore dei path.

            Ultima cosa, ho rimosso la chiave [tt]axis lines=middle[/tt]. Se osservi il risultato è pressapoco uguale (tolte le frecce degli assi), ma così le label degli assi sono automaticamente allineare agli stessi

          • #110735
            lorenzo.pantieri
            Partecipante
              Up
              0
              Down
              ::

              LuglioM26″ post=111027Ciao direi con lo stesso codice dell’altro post:

              `
              \pgfplotsset{
              after end axis/.code={
              \node [text width=2.0cm,align=center,above] at (axis cs:60,300) {saccarosio};
              \node [text width=2.0cm,align=center,above] at (axis cs:100,260) {nitrato \\ di potassio};
              \node [text width=2.0cm,align=center,above] at (axis cs:100,60) {cloruro \\ di potassio};
              }
              }
              `

              Stefano

              Scusami per i ringraziamenti tardivi… perfetto! 🙂

            • #110736
              Up
              0
              Down
              ::


              Senza introdurre
              `\pgfplotsset{
              after end axis/.code={
              \node [text width=2.0cm,align=center,above] at (axis cs:60,300) {saccarosio};
              \node [text width=2.0cm,align=center,above] at (axis cs:100,260) {nitrato \\ di potassio};
              \node [text width=2.0cm,align=center,above] at (axis cs:100,60) {cloruro \\ di potassio};
              }
              }`

              Era sufficiente aggiungere tra i settaggi di [tt]axis[/tt] `clip=false`
              Il risultato sarebbe stato uguale.
              Per l’asse y ti hanno già risposto.

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

          Go to top