Ich habe einige Daten aus einigen numerischen Experimenten in einigen CSV-Dateien gespeichert, die ich in LaTeX einlese mit
\pgfplotstableread{Results/test.csv}\data
Diese Daten bestehen aus x-, y- und z-Koordinaten und ich möchte nun die Höhenkurve für zeichnen z=1
. Mehrere Leute schlagen die Verwendung von gnuplot vor, z. B.Zeichnen einer Niveaukurve, die ich für Datenpunkte mit
\addplot3 [contour gnuplot={levels={1},labels=false,draw color=black}] table[x={x}, y={y}, z={z}]{\data};
die ich mit --shell-escape kompiliere. Das funktioniert allerdings nicht und wirft den Fehler
ExponentialSDE.tex (Zeile 497) Fehler im Paket pgfplots: Entschuldigung, die Verarbeitung des Eingabestroms hat nicht zu Markierungen für das Ende der Scanzeile geführt; die generierte temporäre Datei für „externe Kontur“ enthält keine davon (was darauf hinweist, dass die Matrixstruktur verloren gegangen ist).
Ich habe gelesen, dass ein typisches Problem, das diesen Fehler verursacht, das Fehlen von Gnuplot ist (was Sinn macht). In meinem Fall ist Gnuplot installiert, dies ist die Terminalausgabe, wenn ich es ausführegnuplot
>>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')
Haben Sie Vorschläge, was ich falsch mache und wie ich die Niveaukurve erhalten kann?
Vollständiges MWE
\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}
Antwort1
Es scheint, als compat=newest
sei meines neuer als Ihres, da es mir in meinem Fall genaue Anweisungen gibt, was ich tun soll:
! Fehler im Paket pgfplots: Leider hat die Verarbeitung des Eingabestroms keine Markierungen für das Ende der Scanlinie ergeben; die generierte temporäre Datei für „externe Kontur“ enthält keine davon (was darauf hinweist, dass die Matrixstruktur verloren gegangen ist). Um dies zu beheben, haben Sie die folgenden Optionen: – Fügen Sie Markierungen für das Ende der Scanlinie in Ihre Eingabedaten ein (d. h. leere Zeilen), – geben Sie zwei der drei Optionen „mesh/rows=, mesh/cols=, mesh/num points=“ an.
Wer würde einer so klaren Anweisung widerstehen? ;-) Also ich
- leere Zeilen zu den Daten hinzugefügt und
mesh/rows=3, mesh/cols=3
zum Plot-Befehl
und bekam
\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}