pgfplots:从 csv 文件中的指定行开始绘图

pgfplots:从 csv 文件中的指定行开始绘图

我确实有一个很大的 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}

相关内容