Ersetzen Sie leere Zellen durch NaNs in pgfplotstable

Ersetzen Sie leere Zellen durch NaNs in pgfplotstable

Ich muss den Inhalt einer CSV-Datei darstellen. Die Tabelle in der Datei enthält mehrere leere Zellen, die durch NaNs ersetzt werden sollten, sodass beim Darstellen der Daten mit dieser unbounded coords=jumpOption die Darstellung an den Positionen der fehlenden Werte unterbrochen würde.

Ich habe überlegt, den empty cells withSchlüssel zu verwenden, aber er funktioniert nicht wie erwartet. Im folgenden Beispiel enthält die erste Tabelle leere Zellen, die automatisch durch NaNs ersetzt werden und nicht funktionieren; die zweite Tabelle enthält bereits NaNs-Zellen und funktioniert stattdessen ordnungsgemäß.

\documentclass{article}
\usepackage{pgfplotstable}
\pgfplotsset{compat=1.14}
\usepgfplotslibrary{groupplots}
\usepackage{filecontents}

% the next table won't work properly
\begin{filecontents}{testtablea.csv}
a;b
0;0
1;1
2;2
3;2
4;2
5;2
6;
7;
8;2
9;1
10;0
\end{filecontents}

% this will work instead
\begin{filecontents}{testtableb.csv}
a;b
0;0
1;1
2;2
3;2
4;2
5;2
6;NaN
7;NaN
8;2
9;1
10;0
\end{filecontents}

\pgfplotstableset{empty cells with={NaN}}
\pgfplotstableread[col sep=semicolon]{testtable1.csv}\testtablea
\pgfplotstableread[col sep=semicolon]{testtable2.csv}\testtableb
\begin{document}
\centering
\pgfplotstabletypeset{\testtablea}\hspace{3cm}
\pgfplotstabletypeset{\testtableb}

\begin{tikzpicture}
\begin{axis} [title=automatic replacement, anchor=north east, width=7cm]
\addplot+ [unbounded coords=jump] table {\testtablea};
\end{axis}
\hspace{1cm}

\begin{axis} [title=well defined table, anchor=north west, width=7cm]
\addplot+ [unbounded coords=jump] table {\testtableb};
\end{axis}
\end{tikzpicture}
\end{document}

falsches und richtiges Verhalten

Die Frage ist also:

1) Wie kann ich die leeren Zellen in der ursprünglichen CSV-Datei durch ersetzen, um pgfplotstablemein Ziel zu erreichen?

oder

2) wie kann ich die leeren Werte in einem pgfplot(also ohne pgfplotstable) direkt überspringen?

Antwort1

Mit dem Paket ifthenkönnen Sie hinzufügen

y filter/.code={\ifthenelse{\equal{#1}{}}{\def\pgfmathresult{nan}}{}}

als Plot-Option oder Achsenoption.

Bildbeschreibung hier eingeben

Code:

\documentclass{article}
\usepackage{pgfplotstable}
\pgfplotsset{compat=1.14}
\usepackage{ifthen}% <- added
% the next table won't work properly
\begin{filecontents}{testtablea.csv}
a;b
0;0
1;1
2;2
3;2
4;2
5;2
6;
7;
8;2
9;1
10;0
\end{filecontents}

% this will work instead
\begin{filecontents}{testtableb.csv}
a;b
0;0
1;1
2;2
3;2
4;2
5;2
6;NaN
7;NaN
8;2
9;1
10;0
\end{filecontents}

\pgfplotstableset{empty cells with={NaN}}
\pgfplotstableread[col sep=semicolon]{testtablea.csv}\testtablea
\pgfplotstableread[col sep=semicolon]{testtableb.csv}\testtableb
\begin{document}
\centering
\pgfplotstabletypeset{\testtablea}\hspace{3cm}
\pgfplotstabletypeset{\testtableb}

\begin{tikzpicture}
\begin{axis} [title=automatic replacement, anchor=north east, width=7cm]
\addplot+[
  y filter/.code={\ifthenelse{\equal{#1}{}}{\def\pgfmathresult{nan}}{}},% <- added
  unbounded coords=jump
]  table {\testtablea};
\end{axis}
\hspace{1cm}
\begin{axis} [title=well defined table, anchor=north west, width=7cm]
\addplot+ [unbounded coords=jump] table {\testtableb};
\end{axis}
\end{tikzpicture}
\end{document}

verwandte Informationen