Surf con pgfplots – ordinamento sbagliato dei punti?

  • Creatore
    Topic
  • #102924
    Enrico Maria
    Partecipante
      Up
      0
      Down
      ::


      Credo che la soluzione sia alquanto ovvia (e forse ho capito anche più o meno il punto della guida in cui cercare) ma non ho ancora trovato risposta.

      Ebbene semplicemente il surf plot non viene come dovrebbe venire. L’immagine che allego, confrontando con il risultato di Matlab evidenzia il problema: è come se le “linee” a y=cost venissero stampate in ordine da y=-1 (più “fuori lo schermo”) a y=+1 (più “dentro lo schermo”), il che comporta che le seconde coprono le prime invece che viceversa. Ho pensato a [mesh/ordering=x varies], ma non cambia nulla. O lo uso male..

      Un esempio funzionante è il seguente (ci sono pacchetti superflui in quanto uso questo standalone come banco di prova per provare nuove “cose”)

      `\documentclass{standalone}

      \usepackage{xcolor}
      \usepackage[utf8]{inputenc}
      \usepackage{amsmath,amsfonts}
      \usepackage{bm}
      \usepackage{calc}
      \usepackage{tikz}
      \usetikzlibrary{decorations}
      \usetikzlibrary{calc}
      \usetikzlibrary{patterns}
      \usepackage{tikzscale}
      \usepackage{pgfplots}
      \pgfplotsset{compat=1.12}

      \newcommand{\mat}{\mathbf}
      \renewcommand{\vec}{\bm}

      \begin{document}

      \begin{tikzpicture}
      \begin{axis}[title={Prova surf},xlabel={$x$},ylabel={$y$},zlabel={$z$},view={10}{20},mesh/ordering=x varies]
      \addplot3[surf,mesh/rows=21] table[x=x,y=y,z=z] {data.dat};
      \end{axis}
      \end{tikzpicture}

      \end{document}`

      Qui c’è il file data.dat e, nel caso possano essere utile, le righe di codice Matlab per produrlo sono le seguenti:

      `[X,Y] = meshgrid(-1:.1:1,-1:.1:1);
      Z = X.*Y+ exp(-X.*X*10-Y.*Y*10);
      surf(X,Y,Z)
      fid = fopen('data.dat','w');
      fprintf(fid,'%c\t%c\t%c\n','x','y','z');
      fprintf(fid,'%f\t%f\t%f\n',[X(:) Y(:) Z(:)]');
      fclose(fid)`

      Ops, scusate, il problema era banalmente che tentavo di risolvere con l’opzione mesh/ordering=x varies invece che con mesh/ordering=y varies.
      Devo eliminare il post? 😕

    • Devi essere connesso per rispondere a questo topic.

    Go to top