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
- adicionou linhas vazias aos dados e
mesh/rows=3, mesh/cols=3
para 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}