Trazar la curva de nivel usando datos de pgfplotstable

Trazar la curva de nivel usando datos de pgfplotstable

Tengo algunos datos de algunos experimentos numéricos almacenados en algunos archivos csv, que leo en LaTeX usando

\pgfplotstableread{Results/test.csv}\data

Estos datos constan de coordenadas x, y, z y ahora quiero trazar la curva de nivel para z=1. Varias personas sugieren el uso de gnuplot, por ejemploTrazar una curva de nivel, que he intentado adoptar para puntos de datos con

\addplot3 [contour gnuplot={levels={1},labels=false,draw color=black}] table[x={x}, y={y}, z={z}]{\data};

que compilo con --shell-escape. Sin embargo, esto no funciona y arroja el error.

ExponentialSDE.tex (línea 497) Error de pgfplots del paquete: Lo sentimos, el procesamiento del flujo de entrada no generó marcadores de fin de línea de escaneo; el archivo temporal generado para 'contorno externo' no contiene ninguno de ellos (lo que indica que la estructura de la matriz se ha perdido).

Leí que un problema típico que genera este error es la falta de gnuplot (lo cual tiene sentido). Para mi caso, gnuplot está instalado, esta es la salida del terminal cuando ejecutognuplot

>>gnuplot

    G N U P L O T
    Version 5.2 patchlevel 6    last modified 2019-01-01 

    Copyright (C) 1986-1993, 1998, 2004, 2007-2018
    Thomas Williams, Colin Kelley and many others

    gnuplot home:     http://www.gnuplot.info
    faq, bugs, etc:   type "help FAQ"
    immediate help:   type "help"  (plot window: hit 'h')

¿Tiene alguna sugerencia sobre lo que estoy haciendo mal? y como puedo obtener la curva de nivel?

MWE completo

\documentclass[11pt]{article}
\usepackage{pgfplots}
\pgfplotsset{compat=newest}
\usepackage{pgfplotstable}

\pgfplotstableread{
 x y z
    -1    -1     2
    -1     0     1
    -1     1     2
     0    -1     1
     0     0     0
     0     1     1
     1    -1     2
     1     0     1
     1     1     2
}{\data}

\begin{document}
%Not working
\begin{tikzpicture}
    \begin{axis}[view={0}{90}]
        \addplot3 [contour gnuplot={levels={1},labels=false,draw color=black}] table[x={x}, y={y}, z={z}]{\data};
    \end{axis}
\end{tikzpicture}

%Test for pgfplotstable is properly read
\begin{tikzpicture}
    \begin{axis}[]
        \addplot table[x={x}, y={y}]{\data};
    \end{axis}
\end{tikzpicture}
\end{document}

Respuesta1

Parece que el mío compat=newestes más nuevo que el tuyo porque en mi caso me indica precisamente qué hacer:

! Error de pgfplots del paquete: Lo sentimos, el procesamiento del flujo de entrada no generó marcadores de fin de línea de escaneo; el archivo temporal generado para 'contorno externo' no contiene ninguno de ellos (lo que indica que la estructura de la matriz se ha perdido). Para solucionar este problema, tiene las siguientes opciones: - Insertar marcadores de fin de línea de escaneo en sus datos de entrada (es decir, líneas vacías), - Proporcionar dos de las tres opciones 'mesh/rows=, mesh/cols=, mesh/num puntos='.

¿Quién se resistiría a seguir una instrucción tan clara? ;-) Asique

  1. agregó líneas vacías a los datos y
  2. mesh/rows=3, mesh/cols=3al comando de trama

y consiguió

\documentclass[11pt]{article}
\usepackage{pgfplots}
\pgfplotsset{compat=newest}
\usepackage{pgfplotstable}

\pgfplotstableread{
 x y z
    -1    -1     2
    -1     0     1
    -1     1     2

     0    -1     1
     0     0     0
     0     1     1

     1    -1     2
     1     0     1
     1     1     2
}{\data}

\begin{document}
%Now working
\begin{tikzpicture}
    \begin{axis}[view={0}{90}]
        \addplot3 [contour gnuplot={levels={1},labels=false,draw color=black},
        mesh/rows=3, mesh/cols=3] table[x={x}, y={y}, z={z}]{\data};
    \end{axis}
\end{tikzpicture}
\end{document}

ingrese la descripción de la imagen aquí

información relacionada