如何在 pgfplots 中的线图上使用循环标签

如何在 pgfplots 中的线图上使用循环标签

我想制作如下图表。显示一个国家干预的持续时间。 在此处输入图片描述

由此代码生成:

\begin{tikzpicture}
\begin{axis}[
    date coordinates in=x,
    xticklabel={\day/\month},
    xticklabel style={rotate=90,anchor=near xticklabel},
    axis y line=none,
    axis x line=bottom,
    xmin = 2020-01-25
    ]
\addplot +[color=black,no marks,ultra thick]
table[x=date,y=HUN] {tables/policies_time.txt} node[left,pos=0] {HUN};
\addplot +[color=black,no marks,ultra thick]
table[x=date,y=DEU] {tables/policies_time.txt} node[left,pos=0] {DEU};
\addplot +[color=black,no marks,ultra thick]
table[x=date,y=AUT] {tables/policies_time.txt} node[left,pos=0] {AUT};
\end{axis}
\end{tikzpicture}

我想使用 for 循环,因为我有一组更大的国家。因此我创建了一个循环,并在 table[] 部分和标签节点部分中用运行变量 \isos 替换标签“HUN”、“DEU”和“AUT”。但这次标签出现错误,并且没有出现。

这是我的循环版本的代码:

\begin{tikzpicture}
\begin{axis}[
        date coordinates in=x,
        xticklabel={\day/\month},
        xticklabel style={rotate=90,anchor=near xticklabel},
        axis y line=none,
        axis x line=bottom,
        xmin = 2020-01-25
        ]
\makeatletter
\@for\isos:=HUN,DEU,AUT\do{
    \addplot +[color=black,no marks,ultra thick] table[x=date,y=\isos]    {tables/policies_time.txt}
    node[left,pos=0] {\isos};
    }
\makeatother
\end{axis}
\end{tikzpicture}

您有什么建议吗?如何解决这个问题?

谢谢你,

奥利弗

答案1

作为这个答案建议,如果以这种方式将\foreach(或\@for) 与组合,您将遇到扩展问题。但是,您可以这样使用:\addplot\pgfplotsinvokeforeach

\documentclass[border=2mm]{standalone}

\usepackage{pgfplots}
\pgfplotsset{compat=1.17}
\usepgfplotslibrary{dateplot}

\begin{document}

\begin{tikzpicture}
\begin{axis}[
    date coordinates in=x,
    xticklabel={\day/\month},
    xticklabel style={rotate=90,anchor=near xticklabel},
    axis y line=none,
    axis x line=bottom,
    xmin = 2020-01-25
    ]
    \pgfplotsinvokeforeach{HUN,DEU,AUT}{
       \addplot +[color=black,no marks,ultra thick]
        table[x=date,y=#1] {tables/policies_time.txt} node[left,pos=0] {#1};
    }
\end{axis}
\end{tikzpicture}

\end{document}

由于您没有提供任何数据来提供该图表,因此我无法真正测试这一点。

相关内容