Zeichnen Sie eine Niveaukurve mit Daten aus pgfplotstable

Zeichnen Sie eine Niveaukurve mit Daten aus pgfplotstable

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=newestsei 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

  1. leere Zeilen zu den Daten hinzugefügt und
  2. mesh/rows=3, mesh/cols=3zum 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}

Bildbeschreibung hier eingeben

verwandte Informationen