将一个符号坐标的排版与其他符号坐标不同

将一个符号坐标的排版与其他符号坐标不同

在我的图中,我有一个条形图(标记dummy如下),其刻度标签需要以不同的方式排版。这是我目前的尝试(也是最小示例),但还不太奏效:

\documentclass{article}

\usepackage{pgfplots}
\usepackage{etoolbox}

\begin{document}
\begin{tikzpicture}
\begin{axis}[
  ybar,
  symbolic x coords={foo,bar,dummy},
  xtick=data,
  xticklabel={\ifdefstrequal{\tick}{dummy}{\textcolor{gray}{\tick}}{\tick}}]
  \addplot coordinates {
    (foo,2)
    (bar,4)
    (dummy,3)
  };
\end{axis}
\end{tikzpicture}
\end{document}

现在,我肯定需要匹配名称symbolic x coords;遗憾的是,比较\ticknum不是一个选项,因为条形图的位置dummy会随着情节的不同而变化,而且我不想xticklabel每次都触及定义。那么有没有办法对进行适当的字符串比较呢\tick

答案1

您可以使用该ifthen包:

\documentclass{article}

\usepackage{pgfplots}
\usepackage{ifthen}

\begin{document}
\begin{tikzpicture}
\begin{axis}[
  ybar,
  symbolic x coords={foo,bar,dummy},
  xtick=data,
  xticklabel=\ifthenelse{\equal{\tick}{dummy}}{\textcolor{red}{\tick}}{\tick}]
  \addplot coordinates {
    (foo,2)
    (bar,4)
    (dummy,3)
  };
\end{axis}
\end{tikzpicture}
\end{document}

如果您想使用etoolbox,则必须使用\ifdefstring{<macro>}{<string>},它将宏的内容与字符串进行比较。

\documentclass{article}

\usepackage{pgfplots}
\usepackage{etoolbox}

\begin{document}
\begin{tikzpicture}
\begin{axis}[
  ybar,
  symbolic x coords={foo,bar,dummy},
  xtick=data,
  xticklabel=\ifdefstring{\tick}{dummy}{\textcolor{red}{\tick}}{\tick}]
  \addplot coordinates {
    (foo,2)
    (bar,4)
    (dummy,3)
  };
\end{axis}
\end{tikzpicture}
\end{document}

相关内容