我确实有一个很大的 csv 文件,其中包含的数据比我实际想要绘制的数据还要多。例如,我有从 x=0 开始的数据,但我想从 x=2 开始绘制它,但仍然让轴从 xmin=0 开始。是否可以在 table 命令中指定“起始行”?
\documentclass{article}
\usepackage{pgfplots}
\usepackage{filecontents}
\begin{filecontents*}{mydata.csv}
x, y
1, 0.000004824
2, 0.000004687
3, 0.000009425
4, 0.000004794
5, 0.000004565
\end{filecontents*}
\begin{document}
\begin{tikzpicture}
\begin{axis}[]
\addplot table [col sep=comma] {mydata.csv};
\end{axis}
\end{tikzpicture}
\end{document}
答案1
除了评论中提到的方法外,此解决方案还提出了discard if smaller/.style
采用两个参数的机制:#1=x 和 #2=起始行。下面的演示针对第 2 行,通过discard if smaller={x}{2}
输入addplot
选项
discard if smaller/.style n args={2}{x filter/.code={
\edef\tempa{\thisrow{#1}}
\edef\tempb{#2}
\ifnum\tempa<\tempb
\def\pgfmathresult{inf}
\else
\fi
}
}
}
代码
\documentclass[border=10pt]{standalone}%{article}
\usepackage{pgfplots}
\usepackage{filecontents}
\usepackage{pgfplotstable}
\begin{filecontents*}{mydata.csv}
x, y
1, 0.000004824
2, 0.000004687
3, 0.000009425
4, 0.000004794
5, 0.000004565
\end{filecontents*}
\begin{document}
\pgfplotsset{
discard if smaller/.style n args={2}{
x filter/.code={
\edef\tempa{\thisrow{#1}}
\edef\tempb{#2}
\ifnum\tempa<\tempb
\def\pgfmathresult{inf}
\else
\fi
}
}
}
\begin{tikzpicture}
\begin{axis}[xmin=0]
\addplot +[discard if smaller={x}{2}] table[only marks,x=x,y=y, col sep=comma]{mydata.csv};
\end{axis}
\end{tikzpicture}
\end{document}