Traçar curva de nível usando dados de pgfplotstable

Traçar curva de nível usando dados de pgfplotstable

Tenho alguns dados de alguns experimentos numéricos armazenados em alguns arquivos csv, que li em LaTeX usando

\pgfplotstableread{Results/test.csv}\data

Esses dados consistem em coordenadas x, y e z e agora quero traçar a curva de nível para z=1. Várias pessoas sugerem o uso do gnuplot, por exemploTraçando uma curva de nível, que tentei adotar para pontos de dados com

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

que eu compilo com --shell-escape. Isso, no entanto, não funciona e gera o erro

ExponencialSDE.tex (linha 497) Pacote pgfplots Erro: Desculpe, o processamento do fluxo de entrada não levou a marcadores de fim de linha de varredura; o arquivo temporário gerado para 'contorno externo' não contém nenhum deles (indicando que a estrutura da matriz foi perdida).

Eu li que um problema típico que dá esse erro é a falta do gnuplot (o que faz sentido). No meu caso, o gnuplot está instalado, esta é a saída do terminal quando executognuplot

>>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')

Você tem alguma sugestão sobre o que estou fazendo de errado? e como posso obter a curva de nível?

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}

Responder1

Parece que o meu compat=newesté mais recente que o seu porque no meu caso me instrui precisamente o que fazer:

! Erro do pacote pgfplots: Desculpe, o processamento do fluxo de entrada não levou a marcadores en d-of-scanline; o arquivo temporário gerado para 'contorno externo' não contém nenhum deles (indicando que a estrutura da matriz foi perdida). Para corrigir isso, você tem as seguintes opções: - Inserir marcadores de fim de linha de varredura em seus dados de entrada (ou seja, linhas vazias), - fornecer duas das três opções 'mesh/rows=, mesh/cols=, mesh/num pontos='.

Quem resistiria a seguir uma instrução tão clara? ;-) Então eu

  1. adicionou linhas vazias aos dados e
  2. mesh/rows=3, mesh/cols=3para o comando plot

e pegou

\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}

insira a descrição da imagem aqui

informação relacionada