如何使每行图表中的额外刻度标签仅出现一次?

如何使每行图表中的额外刻度标签仅出现一次?

这是如何添加另一行刻度标签?我目前为一组绘图中的每个绘图都添加了另一行刻度标签。我想要做的是让额外一行刻度标签的描述在每行绘图中仅出现一次,就像y descriptions at=edge left轴描述一样。

我目前得到的内容如下,其中标记了不良的描述:

我尝试让额外的一行刻度标签在每一行图中仅出现一次,但失败了

\documentclass{article}

\usepackage{pgfplots}

\usepgfplotslibrary{groupplots}

\pgfplotsset{
  domain=0:1,
  xmin=0, xmax=1,
  ymax=1, ymin=-1
}

\begin{document}

\begin{figure}
  \begin{tikzpicture}
    \begin{groupplot}[width=6cm,
      clip=false,
      xtick align=inside,
      extra x ticks={0, 0.2, 0.4, ..., 1},
      every extra x tick/.style={major tick length=0pt,
        xtick align=outside, yshift=-10pt},
      group style={group size=2 by 2,
        y descriptions at=edge left},
      ylabel={\(f(x)\)},
      ]
      \pgfplotsinvokeforeach{0.2, 0.4, 0.6, 0.8}{
        \nextgroupplot[extra x tick labels={#1, #1, #1, #1, #1 ,#1}]
        \addplot{#1 - x};
        \node  at (axis description cs:0,0) [anchor=north east, align=left,xshift=-12pt] {\(x_1\)};
        \node  at (axis description cs:0,0) [anchor=north east, align=left,xshift=-12pt,yshift=-11pt] {\(x_2\)};
      }
    \end{groupplot}
  \end{tikzpicture}
\end{figure}

\end{document}

显然,我可以跳过循环,明确写出每个情节及其选项。但这似乎是一种黑客行为和糟糕的风格。例如,这意味着内容和风格不太分离。理想情况下,我希望保留循环,但仍然可以控制样式选项,例如通过允许您执行类似操作的界面extra x descriptions at=edge left

答案1

网格的当前列groupplots存储在\pgfplots@group@current@column计数器中。您可以使用它来检查我们是否在第一列,并且仅在第一列时才打印额外的标签。

该方法还可用于通过使用\pgfplots@group@current@plot包含绘图索引的计数器仅向第一个绘图添加图例。

\documentclass{article}

\usepackage{pgfplots}

\makeatletter
\newcommand{\currentcolumn}{\the\pgfplots@group@current@column}
\newcommand{\currentplot}{\the\pgfplots@group@current@plot}
\makeatother


\usepgfplotslibrary{groupplots}

\pgfplotsset{
  domain=0:1,
  xmin=0, xmax=1,
  ymax=1, ymin=-1
}

\begin{document}

\begin{figure}
  \begin{tikzpicture}
    \begin{groupplot}[width=6cm,
      clip=false,
      xtick align=inside,
      extra x ticks={0, 0.2, 0.4, ..., 1},
      every extra x tick/.style={major tick length=0pt,
        xtick align=outside, yshift=-10pt},
      group style={group size=2 by 2,
        y descriptions at=edge left},
      ylabel={\(f(x)\)},
      ]
      \pgfplotsinvokeforeach{0.2, 0.4, 0.6, 0.8}{
        \nextgroupplot[extra x tick labels={#1, #1, #1, #1, #1 ,#1}]
        \addplot{#1 - x};
        \ifnum\currentcolumn=1
            \node  at (axis description cs:0,0) [anchor=north east, align=left,xshift=-12pt] {\(x_1\)};
                \node  at (axis description cs:0,0) [anchor=north east, align=left,xshift=-12pt,yshift=-11pt] {\(x_2\)};
        \fi
        \ifnum\currentplot=1
        \pgfplotsset{legend entries=Boring Data}
        \fi
      }
    \end{groupplot}
  \end{tikzpicture}
\end{figure}

\end{document}

相关内容