在 pgfplots 中,一个数据文件中可以有多个图吗?
目标是向同一轴添加大约 20 个图,这些图具有不同的点数并且 x 值不同。(约 350 个点)
一个可能的解决方案是将图表放在单独的列中,然后由于 x 值不同而使用大量“nan”:
x p1 p2 P3 ...
1 3 nan nan ...
2 nan 5 nan ...
6 4 8 nan ...
8 7 nan nan ...
...
我不喜欢这个解决方案:o(
这格努普特解决方案很好:数据文件中的不同图由两个换行符分隔,并通过“索引”进行选择。 pgfplots 中是否存在类似的东西?或者还有其他解决方案吗?
答案1
您可以在后台使用 gnuplot \addplot gnuplot [raw gnuplot] {<gnuplot commands>};
:
\documentclass{article}
\usepackage{pgfplots}
\usepackage{filecontents}
\begin{filecontents*}{data.txt}
1 1
2 4
3 9
4 16
5 25
1 1
2.5 5
6 12
\end{filecontents*}
\begin{document}
\begin{tikzpicture}
\begin{axis}
\addplot gnuplot [raw gnuplot] {plot 'data.txt' index 0};
\addplot gnuplot [raw gnuplot] {plot 'data.txt' index 1};
\end{axis}
\end{tikzpicture}
\end{document}
答案2
您可以\addplot
在相同的轴上多次使用该命令。不同的 s 所采用的文件\addplot
可以相同或不同,以及不同的列等。
\pgfplotsset{width=6cm,compat=newest}
\begin{axis}[
scale only axis,
xlabel={$\tau$ ($\mu$s)},
ylabel={P(bitflip)},
ymin=0,
ymax=1,
xmin=0,
xmax=125.66,
]
\addplot[color=red]
table[x=time,y=fidelity] {data1.txt};
\addplot[color=black]
table[x=time,y=fidelity] {data1.txt};
\end{axis}
\end{tikzpicture}
这里不太清楚,但我使用了两个示例文件中的数据来绘制这个
此处的数据文件按列标题进行索引,但您也可以按编号进行索引。其中一个文件以以下几行开头:
time fidelity
0.00000000e+00 0.00000000e+00
2.02874597e-01 9.75413405e-05
5.19896845e-01 4.76482130e-04
8.36998426e-01 7.26895359e-04
1.15410184e+00 7.52986468e-04
1.47115744e+00 8.85559658e-04
您可以将多列放在一个文件中,并且可以容忍间隙(仅空格)。下图中使用了一个包含四列的数据文件,红色图中的时间和振幅条目之间存在明显间隙。
\pgfplotsset{width=6cm,compat=newest}
\begin{tikzpicture}
\begin{axis}[
scale only axis,
xlabel={$\tau$ (ns)},
ylabel={Negativity},
ymin=-1,
ymax=1,
xmin=0,
xmax=6.3,
legend style={font=\small,at={(0.5,0.96)},anchor=north,style={nodes={right}}},
]
\addplot[color=black]
table[x index=0,y index=1] {data.txt};
\addplot[color=red]
table[x index=2,y index=3] {data.txt};
\end{axis}
\end{tikzpicture}
请注意,这次没有列标题(只是为了多样性)。间隙看起来像
2.28479466e+00 7.55749574e-01 -6.54860734e-01 2.28479466e+00
2.34826118e+00 7.12694171e-01 -7.01474888e-01 2.34826118e+00
2.41172769e+00 6.66769001e-01 -7.45264450e-01 2.41172769e+00
2.47519421e+00 6.18158986e-01
2.53866073e+00 5.67059864e-01
2.60212725e+00 5.13677392e-01
2.66559377e+00 4.58226522e-01
2.72906028e+00 4.00930535e-01
2.79252680e+00 3.42020143e-01
2.85599332e+00 2.81732557e-01
2.91945984e+00 2.20310533e-01
2.98292636e+00 1.58001396e-01
3.04639288e+00 9.50560433e-02
3.10985939e+00 3.17279335e-02
3.17332591e+00 -3.17279335e-02
3.23679243e+00 -9.50560433e-02
3.30025895e+00 -1.58001396e-01
3.36372547e+00 -2.20310533e-01
3.42719199e+00 -2.81732557e-01
3.49065850e+00 -3.42020143e-01
3.55412502e+00 -4.00930535e-01
3.61759154e+00 -4.58226522e-01 -8.88835449e-01 3.61759154e+00
3.68105806e+00 -5.13677392e-01 -8.57983413e-01 3.68105806e+00
3.74452458e+00 -5.67059864e-01 -8.23676581e-01 3.74452458e+00
3.80799110e+00 -6.18158986e-01 -7.86053095e-01 3.80799110e+00
只要制表符或逗号的数量正确,列数不均匀也是可以的。
答案3
其他答案不是立即地我很清楚。经过一番努力,我发现从同一个文件中绘制多条线非常容易。
你可以简单地说白线在您的数据文件中,您就完成了:
\documentclass[]{article}
\usepackage{filecontents,pgfplots}
\begin{filecontents}{test.dat}
x y
1 0.5
2 0.5
2 1
1 1
1 0.5
1 2.5
2 2.5
2 3
1 3
1 2.5
\end{filecontents}
\begin{document}
\begin{tikzpicture}[scale=1]
\begin{axis}
[
axis lines=left, axis line style={->},
xmin=0,xmax=5,
ymin=0,ymax=5
]
\addplot [] table [x=x, y=y] {test.dat}; % Plot all shapes in data file
\end{axis}
\end{tikzpicture}
\end{document}
得到两条分别绘制的线:
希望这可以加快某人寻找答案的速度;)