pgfplots 在一个文件中绘制多个图

pgfplots 在一个文件中绘制多个图

在 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}

得到两条分别绘制的线:

一张图中有两条线

希望这可以加快某人寻找答案的速度;)

相关内容