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=jump
Option die Darstellung an den Positionen der fehlenden Werte unterbrochen würde.
Ich habe überlegt, den empty cells with
Schlü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}
Die Frage ist also:
1) Wie kann ich die leeren Zellen in der ursprünglichen CSV-Datei durch ersetzen, um pgfplotstable
mein Ziel zu erreichen?
oder
2) wie kann ich die leeren Werte in einem pgfplot
(also ohne pgfplotstable
) direkt überspringen?
Antwort1
Mit dem Paket ifthen
können Sie hinzufügen
y filter/.code={\ifthenelse{\equal{#1}{}}{\def\pgfmathresult{nan}}{}}
als Plot-Option oder Achsenoption.
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}