У меня есть некоторые данные из некоторых численных экспериментов, сохраненные в 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='.
Кто бы отказался следовать столь четким инструкциям? ;-) Поэтому я
- добавил пустые строки к данным и
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}