如何对 pgfplotstable 进行分区以在多个 tikzpictures 中使用?(并复制一行)

如何对 pgfplotstable 进行分区以在多个 tikzpictures 中使用?(并复制一行)

我正在尝试从一个 pgfplotstable 创建多个图(\data见下文)。我可以通过手动编辑数据(\dataA\dataB下文)来创建图,但这很容易出错。本质上,我需要帮助:

  • 分割基于列的表格cat
  • 复制最后一行(除上一行外xminxmax
  • 创建一个循环创建多个tikzpictures [我大概可以自己弄清楚!]

在此处输入图片描述

\documentclass{article}
\usepackage{pgfplotstable}

\pgfplotsset{compat=1.15}

\begin{document}
\pgfplotstableread{
x   xmin xmax par1    y cat par2
0.5    0    1  yes  0.3   1   no
1.5    1    2  yes  0.6   1   no
2.5    2    3  yes  0.7   1   no
0.5    0    1  yes  0.4   2   no
1.5    1    2  yes  0.5   2   no
2.5    2    3  yes  0.9   2   no
}\data

\pgfplotstableread{
x   xmin xmax par1    y cat par2
0.5    0    1  yes  0.3   1   no
1.5    1    2  yes  0.6   1   no
2.5    2    3  yes  0.7   1   no
2.5    3    3  yes  0.7   1   no
}\dataA

\pgfplotstableread{
x   xmin xmax par1    y cat par2
0.5    0    1  yes  0.4   2   no
1.5    1    2  yes  0.5   2   no
2.5    2    3  yes  0.9   2   no
2.5    3    3  yes  0.9   2   no
}\dataB

\begin{tikzpicture}
  \begin{axis}[ybar, ymin=0, ymax=1, xmin=-0.5, xmax=3.5]
    \addplot[black, ybar interval] table[x=xmin,y=y] {\dataA}\closedcycle;
  \end{axis}
\end{tikzpicture}

\begin{tikzpicture}
  \begin{axis}[ybar, ymin=0, ymax=1, xmin=-0.5, xmax=3.5]
    \addplot[black, ybar interval] table[x=xmin,y=y] {\dataB}\closedcycle;
  \end{axis}
\end{tikzpicture}

\end{document}

关于分割数据,我已经能够打印分区表,但是我该如何使用它作为输入\addplot

\newcommand{\filtertable}[2]{
\pgfplotstabletypeset[
  columns/par1/.style={string type},
  columns/par2/.style={string type},
  row predicate/.code={%
  \pgfplotstablegetelem{##1}{cat}\of{#1}
  \ifnum\pgfplotsretval=#2\relax
  \else\pgfplotstableuserowfalse\fi}
]{#1}
}

\filtertable{\data}{1}
\filtertable{\data}{2}

关于复制最后一行,最后几行中唯一相关的值是xmin。根据 PGF 手册ybar interval “最后一个 y 值将被忽略。”我尝试创建相同的图,但没有成功,但没有添加额外的行。请注意xmin和之间的距离xmax不能总是等于 1。

答案1

一种方法是安装一个过滤器,例如

无界坐标=丢弃,x 过滤器/.表达式={\thisrow{cat}==1 ? x : nan}

梅威瑟:

\documentclass{article}
\usepackage{pgfplotstable}

\pgfplotsset{compat=1.15}

\begin{document}
\pgfplotstableread{
x   xmin xmax par1    y cat par2
0.5    0    1  yes  0.3   1   no
1.5    1    2  yes  0.6   1   no
2.5    2    3  yes  0.7   1   no
0.5    0    1  yes  0.4   2   no
1.5    1    2  yes  0.5   2   no
2.5    2    3  yes  0.9   2   no
}\data

\pgfplotstableread{
x   xmin xmax par1    y cat par2
0.5    0    1  yes  0.3   1   no
1.5    1    2  yes  0.6   1   no
2.5    2    3  yes  0.7   1   no
2.5    3    3  yes  0.7   1   no
}\dataA

\pgfplotstableread{
x   xmin xmax par1    y cat par2
0.5    0    1  yes  0.4   2   no
1.5    1    2  yes  0.5   2   no
2.5    2    3  yes  0.9   2   no
2.5    3    3  yes  0.9   2   no
}\dataB

\begin{tikzpicture}
  \begin{axis}[ybar, ymin=0, ymax=1, xmin=-0.5, xmax=3.5]
    \addplot[black, ybar interval,unbounded coords=discard,
    x filter/.expression={\thisrow{cat}==1 ? x : nan}] table[x=xmin,y=y] {\data}\closedcycle;
  \end{axis}
\end{tikzpicture}

\begin{tikzpicture}
  \begin{axis}[ybar, ymin=0, ymax=1, xmin=-0.5, xmax=3.5]
    \addplot[black, ybar interval,unbounded coords=discard,
    x filter/.expression={\thisrow{cat}==2 ? x : nan}] table[x=xmin,y=y] {\data}\closedcycle;
  \end{axis}
\end{tikzpicture}

\end{document}

在此处输入图片描述

相关内容