使用 pgfplots 绘制数据,使得每个数据点对应每个第二个 x 值

使用 pgfplots 绘制数据,使得每个数据点对应每个第二个 x 值

我想使用 pgfplots 绘制 txt 文件中的数据。我的代码是

\pgfplotstableread{data/Full_data_matrix.txt}{\data}
\begin{figure}[htpb]
    \centering
    \begin{tikzpicture}[scale=0.7]
    \begin{axis}[minor tick num=1,
    xlabel=Time,
    ylabel=Carrier density [$1/\si{\meter\cubed}$]
    \addplot [black,very thick] table [x={Time}, y={A}] {\data};
    \addplot [red,very thick] table [x={Time}, y={B}] {\data};
    \addplot [green,very thick] table [x={Time}, y={C}] {\data};
    \end{axis}
    \end{tikzpicture}
    \caption{Carrier concentration created by pulses at different wavelengths}
\end{figure}

现在, 的点数是 的两倍Time,的A点数B是 的两倍C,但我知道 的每个点C对应于时间的每个第二点。有没有一种简单的方法可以告诉pgfplots您这一点,而不必为 引入新的时间尺度C

数据文件的示例为

Time  A  B  C
0  1  1  1
1  2  2  3
2  3  3  5
3  4  4  7
4  5  5  0 
5  6  6  0 
6  7  7  0

在这里我希望所有的线都完全相同,但由于数据点数量较少,我必须以C某种方式进行拉伸。

答案1

x expr={<some calculation>}您可以使用而不是根据行号或特定列值计算 x 值x=<column>。要获取表的行号(从 0 开始计数),请使用\coordindex,要获取特定列的值,请使用\thisrow{<columnname>}。在您展示的具体示例中,x expr={2*\thisrow{Time}}应该可以工作,但它应该与类似的东西结合起来restrict x to domain=-1:7.4,以过滤掉列末尾的零。(如果您用 替换数据表中的零,则NaN不必进行过滤。)

在此处输入图片描述

\documentclass{article}
\usepackage{pgfplotstable}
\usepackage{siunitx}
\pgfplotsset{compat=1.3} % if you don't have a compat setting already
\begin{document}

\pgfplotstableread{
Time  A  B  C
0  1  1  1
1  2  2  3
2  3  3  5
3  4  4  7
4  5  5  0 
5  6  6  0 
6  7  7  0
}{\data}
\begin{figure}[htpb]
    \centering
    \begin{tikzpicture}
    \begin{axis}[
      small,
      minor tick num=1,
      xlabel=Time,
      ylabel={Carrier density [$1/\si{\meter\cubed}$]} % note braces around the whole ylabel
    ]

    \addplot [black,very thick] table [x={Time}, y={A}] {\data};
    \addplot [red,very thick] table [x={Time}, y={B}] {\data};
    \addplot [green,
              very thick,
              restrict x to domain=-1:7.4 % to filter away the last three rows
             ]
            table [
              x expr={2*\thisrow{Time}}, % an appropriate expression for this case 
              y={C}
              ] {\data};
    \end{axis}
    \end{tikzpicture}
    \caption{Carrier concentration created by pulses at different wavelengths}
\end{figure}
\end{document}

相关内容