仅包含少量(偏移)误差线的绘图

仅包含少量(偏移)误差线的绘图

我想制作一个带有多个带误差线的图。每条曲线有 1100 个点。我想只绘制几个 (5) 个误差线以增加可读性。出于同样的原因,我希望每组误差线偏移不同的间隔。例如:

图 1:误差线在 0、250、500、750、1000 处;图 2:误差线在 10、260、510、760、1010 处;图 3:误差线在 20、270、520、770、1020 处;等等。

我目前的尝试是:

\pgfplotsset{err/.style={each nth point={250},forget plot,draw=none}}
\pgfplotsset{errp/.style={err, error bars/.cd,y dir=plus,  y explicit}}
\pgfplotsset{errm/.style={err, error bars/.cd,y dir=minus, y explicit}}

% plot 1
\addplot+[errm] table[x index=0,y index=1, y error index=2}]{\table};
\addplot+[errp] table[x index=0,y index=1, y error index=3}]{\table};
\addplot table[x index=0,y index=1]{\table};

% plot 2
\addplot+[skip coords between index={0}{10}, errm] table[x index=0,y index=4, y error index=5}]{\table};
\addplot+[skip coords between index={0}{10}, errp] table[x index=0,y index=4, y error index=6}]{\table};
\addplot table[x index=0,y index=4]{\table};

% plot 3
\addplot+[skip coords between index={0}{20}, errm] table[x index=0,y index=7, y error index=8}]{\table};
\addplot+[skip coords between index={0}{20}, errp] table[x index=0,y index7, y error index=9}]{\table};
\addplot table[x index=0,y index=7]{\table};

% etc.

each nth point={250}按照我想要的方式运行,但是skip coords between index={0}{20}没有起作用(它只抑制了第一个错误条)。

此外,编译时间非常长,我想知道改变我的方法是否可以减少它(我已经使用了外部化)。我的另一个尝试是生成一个只包含相关数据的错误表并绘制它们。这有点麻烦,因为每次想要改变图的外观时都需要返回数据生成。

总结:

  • 如何引入 skip ?
  • 有没有更简洁、更高效的代码来做到这一点?

一些数据:

完整数据

第一列是横坐标。然后是 3 列数据。然后是 3 列减去误差。然后是 3 列加上误差。

这个例子:

expl.tex 是主体,graph.tex 是图形。

解释性

图形.tex

答案1

你可以使用

\addplot [draw=none, forget plot]
    gnuplot [raw gnuplot] {plot "full.dat" using 1:2:5:8 every 300::50 with yerrorbars};

让 gnuplot 将从第 50 行开始的每 300 行的第 1、2、5 和 8 列写入名为\jobname.pgf-plot.table。然后可以在误差线绘图命令中使用它。Gnuplot 对文件的下采样速度非常快,比 key 快得多each nth point

\documentclass{article}

\usepackage{pgfplots}

\pgfplotstableread{full.dat}{\table}

\begin{document}
\begin{tikzpicture}
\pgfplotsset{err/.style={forget plot,draw=none}}
\pgfplotsset{errp/.style={err, error bars/.cd,y dir=plus,  y explicit}}
\pgfplotsset{errm/.style={err, error bars/.cd,y dir=minus, y explicit}}
\begin{axis}[
    /pgfplots/table/header=false % This is necessary, otherwise the first line of each file would be assumed to not contain data, but the column names
]


\addplot [draw=none, forget plot] gnuplot [raw gnuplot] {plot "full.dat" using 1:2:5:8 every 300 with yerrorbars};
\addplot+[errm] table [y error index=2]{\jobname.pgf-plot.table};
\addplot+[errp] table [y error index=3]{\jobname.pgf-plot.table};
\addplot +[no markers] table [y index=1]{\table};

\addplot [draw=none, forget plot] gnuplot [raw gnuplot] {plot "full.dat" using 1:3:6:9 every 300::50 with yerrorbars};
\addplot+[errm] table [y error index=2]{\jobname.pgf-plot.table};
\addplot+[errp] table [y error index=3]{\jobname.pgf-plot.table};
\addplot +[no markers] table [y index=2]{\table};

\end{axis}
\end{tikzpicture}
\end{document}

相关内容