我需要繪製 csv 檔案的內容。文件中的表格包含幾個空白單元格,應將其替換為 NaN,以便使用該unbounded coords=jump
選項繪製資料時會在缺失值的位置中斷繪圖。
我想過使用empty cells with
密鑰,但它沒有按預期工作。在下面的範例中,第一個表包含空單元格,這些單元格會自動替換為 NaN,並且不起作用;第二個表已經包含 NaN 單元格並且可以正常工作。
\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}
所以問題是:
1)如何透過取代原始csv檔案中的空白儲存格來pgfplotstable
達到我的目標?
或者
2)如何直接跳過 a 中的空值pgfplot
(即沒有pgfplotstable
)?
答案1
透過包ifthen
你可以添加
y filter/.code={\ifthenelse{\equal{#1}{}}{\def\pgfmathresult{nan}}{}}
作為繪圖選項或軸選項。
代碼:
\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}