Il plot su tikz genera un grafico sbagliato

  • Creatore
    Topic
  • #120650
    Up
    0
    Down
    ::


    Salve a tutti,

    ultimamente sto utilizzando molto tikz che funziona benissimo ad eccezione che per il plot delle funzioni che, in alcuni casi produce degli errori. Nell’immagine potete vedere quello che sarebbe dovuto essere il plot di ln(x) e di ln(xe^-x). È chiaro che c’è qualcosa che non va. Un problema simile si verifica per funzioni come x sin (1/x) in prossimità di 0.

    Codice Tikz:

    `
    \begin{tikzpicture}[scale=1.18]

    %ASSI
    \pgfmathsetmacro{\xmin}{-2}; \pgfmathsetmacro{\xmax}{8};
    \pgfmathsetmacro{\ymin}{-10}; \pgfmathsetmacro{\ymax}{4};
    \pgfmathsetmacro{\gap}{0};
    \draw[->] ( \xmin -\gap -0.25 , 0 ) — ( \xmax +\gap +0.25 , 0 ) node[below]{$x$};
    \draw[->] ( 0 , \ymin -\gap – 0.25) — ( 0 , \ymax + \gap + 0.25 ) node

    {$y$};
    \draw[dotted] ( \xmin – \gap +0.1 , \ymin -\gap +0.1) grid ( \xmax + \gap -0.1, \ymax + \gap -0.1);

    %funzione
    \draw[very thick, magenta, smooth, variable=\x, domain=0.001:8] plot( \x, {ln(\x)} );
    \draw[very thick, cyan, smooth, variable=\x, domain=0.001:8] plot( \x, {ln(\x*exp(-\x))} );

    \end{tikzpicture}
    `
    Ho evitato di inserire il preambolo che è lunghissimo, se c’è bisogno di informazioni su pacchetti e compilatori chiedete pure

    Grazie anticipate.

    Roberto

    Attachments:
    You must be logged in to view attached files.
Visualizzazione 3 filoni di risposte
  • Autore
    Risposte
    • #120651
      OldClaudio
      Partecipante
        Up
        0
        Down
        ::


        Il discorso dell’esempio minimo compilable è spiegato qui in calce; qui ti riporto l’esempio che avresti potuto presentare senza nessuno sforzo.`\documentclass{article}
        \usepackage{pgfplots,tikz}

        \begin{document}
        \begin{tikzpicture}[scale=1.18]

        %ASSI
        \pgfmathsetmacro{\xmin}{-2}; \pgfmathsetmacro{\xmax}{8};
        \pgfmathsetmacro{\ymin}{-10}; \pgfmathsetmacro{\ymax}{4};
        \pgfmathsetmacro{\gap}{0};
        \draw[->] ( \xmin -\gap -0.25 , 0 ) — ( \xmax +\gap +0.25 , 0 ) node[below]{$x$};
        \draw[->] ( 0 , \ymin -\gap – 0.25) — ( 0 , \ymax + \gap + 0.25 ) node

        {$y$};
        \draw[dotted] ( \xmin – \gap +0.1 , \ymin -\gap +0.1) grid ( \xmax + \gap -0.1, \ymax + \gap -0.1);

        %funzione
        \draw[very thick, magenta, smooth, variable=\x, domain=0.001:8] plot( \x, {ln(\x)} );
        \draw[very thick, cyan, smooth, variable=\x, domain=0.001:8] plot( \x, {ln(\x*exp(-\x))} );

        \end{tikzpicture}
        \end{document}` Il motivo per il quale ti viene quell’ondulazione nelle due curve dipende dal fatto che la corva è campionata in un numero di punti insofficiente; forse dipende da smooth? non lo so, perché non sono un esperto di tikz e plots. quindi non posso aiutarti; ma plottando da 0.001 a 8, direi che 80 punti dovrebbero essere sufficienti; come si imposti il numero di punti, le devi andare a cercare nella documentazione, molto abbondante, 573 pagine 🙁 🙁 🙁 . Tuttavia l’indice generale e l’indice analitico permettono di trovare rapidamente le informazioni che si cercano, visto che il documento pdf (che apri e leggi con il comando texdoc pgfplots dato in un terminale) è un file pdf con tutti i collegamenti ipertestuali necessari.

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

          robertodivito” post=121168Salve a tutti,

          ultimamente sto utilizzando molto tikz che funziona benissimo ad eccezione che per il plot delle funzioni che, in alcuni casi produce degli errori. Nell’immagine potete vedere quello che sarebbe dovuto essere il plot di ln(x) e di ln(xe^-x). È chiaro che c’è qualcosa che non va. Un problema simile si verifica per funzioni come x sin (1/x) in prossimità di 0.

          Codice Tikz:

          `
          \begin{tikzpicture}[scale=1.18]

          %ASSI
          \pgfmathsetmacro{\xmin}{-2}; \pgfmathsetmacro{\xmax}{8};
          \pgfmathsetmacro{\ymin}{-10}; \pgfmathsetmacro{\ymax}{4};
          \pgfmathsetmacro{\gap}{0};
          \draw[->] ( \xmin -\gap -0.25 , 0 ) — ( \xmax +\gap +0.25 , 0 ) node[below]{$x$};
          \draw[->] ( 0 , \ymin -\gap – 0.25) — ( 0 , \ymax + \gap + 0.25 ) node

          {$y$};
          \draw[dotted] ( \xmin – \gap +0.1 , \ymin -\gap +0.1) grid ( \xmax + \gap -0.1, \ymax + \gap -0.1);

          %funzione
          \draw[very thick, magenta, smooth, variable=\x, domain=0.001:8] plot( \x, {ln(\x)} );
          \draw[very thick, cyan, smooth, variable=\x, domain=0.001:8] plot( \x, {ln(\x*exp(-\x))} );

          \end{tikzpicture}
          `
          Ho evitato di inserire il preambolo che è lunghissimo, se c’è bisogno di informazioni su pacchetti e compilatori chiedete pure

          Grazie anticipate.

          Roberto

          Ciao.
          I grafici possono essere creati sia con TikZ direttamente, come fai tu, sia con il pacchetto pgfplots, come ti suggeriva Claudio.
          pgfplots è un pacchetto specifico basato su Tikz che ti permette tutte le personalizzazioni che desideri compreso la precisione di tracciamento.
          Esiste un credo buon articolo/tutorial si pgfplots. Scaricalo dalla sezione della rivista del GuIT. Esso è contenuto nel numero di Ottobre 2011.
          Saluti.
          R.

        • #120653
          OldClaudio
          Partecipante
            Up
            0
            Down
            ::


            Con il piccolo esempio minimo compilabile che ho postato nel pomeriggio, ho aggiunto alle opzioni dei due diagrammi magenta e ciano l’opzione [tt]samples=200[/tt] e i due diagrammi vengono quasi perfetti, nel senso che quello celeste ha qualche lievissiona imperfezione visibile solo se ingrandisci l’immagine a schermo di almeno 10 volte. cerca samples con il visualizzaore di file pdf e lo troverai facilmente, come l’ho trovato io che in 35 anni di uso di LaTeX avrò usato TikZ e pgfplots meno di 10 volte 🙁 🙂

          • #120654
            Up
            0
            Down
            ::


            Rispondo a tutti,

            Seguendo il suggerimento di OldClaudio, ho provato ad impostare un numero basso di campioni: 80, poi sperimentando ho trovato che con 160 si riesce ad avere un buon grafico, (fig 1 allegata).

            In precedenza avevo però adottato la medesima soluzione al caso di x sin (1/x) (in figura 2) ma il grafico continuava ad avere problemi. Però allora scelsi un numero di campioni elevatissimo 500, 1000 convinto che maggiore fosse il numero di campioni e migliore sarebbe stata la resa.

            Scegliendo un numero più piccolo di campioni (sempre 160) si ottiene un buon grafico anche di x sin (1/x), ma qui bisogna usare in combinazione smooth (figura 3)

            Quanto a pgfplots, sicuramente lo studierò in estate ora avevo bisogno di una soluzione “in time” e mi trovavo comodo con questo sistema customizzato da me.

            Ringrazio tutti per gli interventi.
            Roberto

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

        Go to top