我想使用 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}