Построить кривую уровня, используя данные из pgfplotstable

Построить кривую уровня, используя данные из pgfplotstable

У меня есть некоторые данные из некоторых численных экспериментов, сохраненные в CSV-файлах, которые я считываю в LaTeX с помощью

\pgfplotstableread{Results/test.csv}\data

Эти данные состоят из координат x, y и z, и теперь я хочу построить кривую уровня для z=1. Несколько человек предлагают использовать gnuplot, напримерПостроение кривой уровня, который я попытался применить для точек данных с

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

который я компилирую с --shell-escape. Однако это не работает и выдает ошибку

ExponentialSDE.tex (строка 497) Пакет pgfplots Ошибка: К сожалению, обработка входного потока не привела к маркерам конца строки развертки; сгенерированный временный файл для «contour external» не содержит ни одного из них (что указывает на потерю структуры матрицы).

Я читал, что типичная проблема, которая приводит к этой ошибке, это отсутствие gnuplot (что имеет смысл). В моем случае gnuplot установлен, это вывод терминала, когда я запускаюgnuplot

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

Есть ли у вас какие-либо предложения относительно того, что я делаю неправильно? и как мне получить кривую уровня?

Полный МВЭ

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

решение1

Похоже, мой compat=newestвариант новее вашего, потому что в моем случае он точно указывает мне, что делать:

! Ошибка пакета pgfplots: Извините, обработка входного потока не привела к маркерам конца строки развертки; сгенерированный временный файл для 'contour external' не содержит ни одного из них (что указывает на потерю структуры матрицы). Чтобы исправить это, у вас есть следующие возможности: - Вставить маркеры конца строки развертки во входные данные (т. е. пустые строки), - предоставить два из трех вариантов 'mesh/rows=, mesh/cols=, mesh/num points='.

Кто бы отказался следовать столь четким инструкциям? ;-) Поэтому я

  1. добавил пустые строки к данным и
  2. mesh/rows=3, mesh/cols=3к команде сюжета

и получил

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

введите описание изображения здесь

Связанный контент