\foreach 循环绘制线条

\foreach 循环绘制线条

我试图使用 \foreach 从文件中读取特定列。如果此列中的值低于例如 55,则应绘制一条线。我正在使用 groupplot,并且该线应在两个图形中且在两条线的后面。因此图形应该看起来是那样。我还没有发现是否可以用 latex 做到这一点...我只知道,如果它可以工作,命令必须在 \end{groupplot} 之后。

我认为命令可能是这样的:

\foreach \xyz <= 55 in {\test} {\draw [red, thick]} (当然这只是一个想法......)

输入数据比最小示例长得多,因此无法手动绘制。另一个想法是将文件中的值排序并删除所有大于 55 的值。对于这个文件,我想我可以使用 \draw...但因为我有大约 125 个文件,所以将它们从现有文件中取出会容易得多...

我对每一个出现的想法都感到高兴!

在此处输入图片描述

\documentclass{article}
\usepackage{pgfplots}
\usetikzlibrary{pgfplots.groupplots}
\pgfplotstableread [col sep=comma]{
pos, xyz, abc
1, 56, 1
2, 55, 3
3, 51, 2
4, 64, 1
5, 45, 1
6, 54, 2
7, 25, 1
8, 75, 3
9, 54, 2
10, 64, 1
11, 45, 1
12, 54, 2
}\test

\begin{document}
\begin{tikzpicture}[rotate=-90]
\begin{groupplot}[
    group style={
        group name=my plots,
        group size=1 by 3,
        xlabels at=edge bottom,
        xticklabels at=edge bottom,
        vertical sep=0pt,
    },
    footnotesize,
    width=20cm,
    height=8cm,
    xlabel=Site,
    xmin=0, xmax=13,
    ymin=0,
    tickpos=left,
  ]
\nextgroupplot
\addplot table[x=pos, y=abc, mark =none]{\test};
\nextgroupplot[ymax=100]
\addplot [black]  table [x=pos,y=xyz]{\test};
\end{groupplot}

%\foreach \xyz <= 55 in {\test} {\draw [red, thick]}

\end{tikzpicture}
\end{document}

答案1

\documentclass{article}
\usepackage{pgfplots}
\pgfplotsset{compat=1.18}
\usetikzlibrary{pgfplots.groupplots}
\usepackage{pgfplotstable}
\pgfplotstableread [col sep=comma]{
pos, xyz, abc
1, 56, 1
2, 55, 3
3, 51, 2
4, 64, 1
5, 45, 1
6, 54, 2
7, 25, 1
8, 75, 3
9, 54, 2
10, 64, 1
11, 45, 1
12, 54, 2
}\test
\begin{document}
\begin{tikzpicture}[rotate=-90]
\begin{groupplot}[
    group style={
        group name=my plots,
        group size=1 by 3,
        xlabels at=edge bottom,
        xticklabels at=edge bottom,
        vertical sep=0pt,
    },
    footnotesize,
    width=20cm,
    height=8cm,
    xlabel=Site,
    xmin=0, xmax=13,
    ymin=0,
    tickpos=left,
    clip=false
  ]
\nextgroupplot
\addplot table[x=pos, y=abc, mark =none]{\test};
\nextgroupplot[ymax=100]
\addplot [black]  table [x=pos,y=xyz]{\test};
\pgfplotstableforeachcolumnelement{xyz}\of\test\as\xyz{%
\ifnum\xyz<55 {
 \addplot[red] coordinates {(\pgfplotstablerow+1, 0) (\pgfplotstablerow+1, 200)};
}
\fi
}
\addplot[dashed] coordinates {(0, 55) (13, 55)};
\end{groupplot}
\end{tikzpicture}
\end{document}

带有红色水平线的图表

相关内容