Node (pgfplots) in posizioni relative a funzioni matematiche

  • Creatore
    Topic
  • #46717
    Up
    0
    Down
    ::


    Buongiorno a tutti! Non so se dal titolo si capisce ma ho un problema con pgfplots. In particolare pgf/tikz (pag. 187 del manuale) fornisce delle opzioni ai nodi per poterli posizionare in maniera relativa rispetto ad una linea! Ad esempio:
    `\tikz \draw (0,0) — (3,1) node[pos=0]{0} node[pos=0.5]{1/2} node[pos=0.9]{9/10};`
    fornisce un nodo all’inizio, uno in mezzo ed uno alla fine! Inoltre si può specificare se mettere la scritta sopra, sotto, al centro passando sempre a node altre opzioni come in quest’altro caso:
    `\draw (0,0) — (2,0.5) node[midway,sloped,above] {$x$};`
    Che voi sappiate è possibile fare una cosa del genere anche con un grafico disegnato direttamente scrivendo la funzione? Oppure quando si ha a disposizione il file .dat in cui sono memorizzate le coordinate?
    Quel che sono riuscito a fare (per piazzare le palline e le freccette sulle curve) è stato definire i nodi e metterci dei pin a forma di freccia però in questo modo se la curva dovesse cambiare andrebbe tutto a farsi benedire! Quindi per questo volevo sapere se c’era un modo più automatico. Riporto un esempio minimo del codice:
    `\documentclass{book}

    \usepackage{pgfplots}

    \begin{document}

    \begin{tikzpicture}[domain=0:25,every pin edge/.style={->},pin distance=.3cm]
    \begin{axis}[xmax=25,ymax=200, %
    width=\textwidth, %
    no markers, %
    enlarge x limits=false, % se non ho limiti espliciti
    enlarge y limits=false, %
    ]
    \addplot {-2*x^2 + (x^3)/10};
    \addplot {(x^3)/30};
    \addplot {(x^2 + x^3)/10};
    \node[fill,circle,inner sep=2pt,pin=261:] at (axis cs:11,175) {};
    \node[fill,circle,inner sep=2pt,pin=250:] at (axis cs:16.45,170) {};
    \node[fill,circle,inner sep=2pt,pin=266:] at (axis cs:21.65,120) {};
    \end{axis}
    \end{tikzpicture}

    \end{document}`
    Grazie mille
    Fra

Visualizzazione 3 filoni di risposte
  • Autore
    Risposte
    • #46718
      Up
      0
      Down
      ::


      `\documentclass{book}

      \usepackage{pgfplots}

      \begin{document}

      \begin{tikzpicture}[domain=0:25,every pin edge/.style={->},pin distance=.3cm]
      \begin{axis}[xmax=25,ymax=200, %
      width=\textwidth, %
      no markers, %
      enlarge x limits=false, % se non ho limiti espliciti
      enlarge y limits=false, %
      ]
      \addplot {-2*x^2 + (x^3)/10};
      \addplot {(x^3)/30};
      \addplot {(x^2 + x^3)/10};
      \addplot [domain=0:22] {-2*x^2 + (x^3)/10} node [pin=180:{A}] {};
      \addplot [domain=22:25] {-2*x^2 + (x^3)/10};
      \addplot [domain=0:16] {(x^3)/30} node [pin=180:{B}] {};
      \addplot [domain=16:25] {(x^3)/30};
      \addplot [domain=0:11] {(x^2 + x^3)/10} node [pin=180:{C}] {};
      \addplot [domain=11:25] {(x^2 + x^3)/10};
      \end{axis}
      \end{tikzpicture}

      \end{document}`

      sono riuscito a mettere un nodo solo in fondo a un plot…
      quindi ho dovuto spezzare la linea in 2 in modo da piazzare il nodo desiderato.
      soluzione sub-ottimale, ma utilizzabile… niente di meglio per ora!

    • #46719
      Up
      0
      Down
      ::


      L’idea di spezzare il grafico è davvero niente male!! Inoltre inserendo l’opzione “left” ad un nodo questo viene posizionato come se davvero fosse poggiato sulla curva! Grazie mille!
      Purtroppo rimane il problema di dover settare a mano l’angolo e c’è il fatto che bisogna scrivere tre equazioni invece di una (ho visto che anche quella intera è necessaria se le si vuole modificare, ad esempio, il colore senza cambiare anche quello del nodo).

      Comunque ancora grazie!

      Fra

      P.S. Sono cieco io oppure alcuni angoli passati ai pin non vengono riconosciuti?tipo tra 265 e 268 c’è una grossa differenza, ma tra 268 e 269 e 270 sembra che non ce ne sia. 😕

    • #46720
      Up
      0
      Down
      ::

      P.S. Sono cieco io oppure alcuni angoli passati ai pin non vengono riconosciuti?tipo tra 265 e 268 c’è una grossa differenza, ma tra 268 e 269 e 270 sembra che non ce ne sia. 😕

      Non sembrerebbe con la mia versione di pgf (cvs di una settimana fa piu’ o meno)

      `\documentclass{minimal}
      \usepackage{tikz}

      \begin{document}
      \begin{tikzpicture}[pin distance=15cm,every node/.style={rotate=90}]
      \foreach \angle in {260,…,270}
      \node [circle,fill,minimum size=1ex,pin=\angle-90:\angle] {};
      \end{tikzpicture}
      \end{document}
      `

    • #46721
      Up
      0
      Down
      ::

      P.S. Sono cieco io oppure alcuni angoli passati ai pin non vengono riconosciuti?tipo tra 265 e 268 c’è una grossa differenza, ma tra 268 e 269 e 270 sembra che non ce ne sia. 😕

      Non sembrerebbe con la mia versione di pgf (cvs di una settimana fa piu’ o meno)

      `\documentclass{minimal}
      \usepackage{tikz}

      \begin{document}
      \begin{tikzpicture}[pin distance=15cm,every node/.style={rotate=90}]
      \foreach \angle in {260,…,270}
      \node [circle,fill,minimum size=1ex,pin=\angle-90:\angle] {};
      \end{tikzpicture}
      \end{document}
      `

      La cosa mi turba non poco!! In effetti aumentando la lunghezza dei pin la differenza si vede eccome! Non solo: gli angoli impostati per i pin in precedenza sembrano completamente sballati! Porbabilmente è dovuto al fatto che una differenza di un grado non la si vede per distanze così brevi, o forse dipende dal visualizzatore .pdf? Comunque aumentare la lunghezza, scegliere l’angolo ed accorciare tutto sembra funzionare!

      Grazie ancora!
      Fra

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

Go to top