x 刻度标签的替代位置

x 刻度标签的替代位置

是否可以自动更改 pgfplots 中每个其他 x 刻度标签的位置?

这是我的情况:我有一个图,其中有从表中加载的符号 x 刻度标签。这些标签太宽,无法彼此相邻:

在此处输入图片描述

我希望其他所有标签都是自动地像这个例子一样稍微向下移动:

在此处输入图片描述

“坏”示例的最小工作代码:

\documentclass[a4paper]{article}
\usepackage{pgfplots}
\pgfplotsset{compat=1.5}

\begin{filecontents}{data.txt}
  label     x y
  foobarbaz 0 1
  foobarbaz 1 1
  foobarbaz 2 1
  foobarbaz 3 1
  foobarbaz 4 1
\end{filecontents}

\begin{document}
\begin{tikzpicture}
  \begin{axis}[
      ybar,
      x=1cm,
      xtick=data,
      xticklabels from table={data.txt}{label},
    ]
    \addplot table [x=x, y=y] {data.txt};
  \end{axis}
\end{tikzpicture}
\end{document}

对于“好”的标签,我手动将其添加\raisebox到其他每个标签中:

\begin{filecontents}{data.txt}
  label     x y
  foobarbaz 0 1
  \raisebox{-4ex}{foobarbaz} 1 1
  foobarbaz 2 1
  \raisebox{-4ex}{foobarbaz} 3 1
  foobarbaz 4 1
\end{filecontents}

但是,由于我的实际数据包含更多行,我不想像这样手动执行此操作。有没有办法使用 pgfplots 自动执行此操作?

答案1

你可以使用

x tick label style={yshift={-mod(\ticknum,2)*1em}}

在此处输入图片描述

代码:

\documentclass[a4paper]{article}
\usepackage{pgfplots}
\pgfplotsset{compat=1.5}

\begin{filecontents}{data.txt}
  label     x y
  foobarbaz 0 1
  foobarbaz 1 1
  foobarbaz 2 1
  foobarbaz 3 1
  foobarbaz 4 1
\end{filecontents}

\begin{document}
\begin{tikzpicture}
  \begin{axis}[
      ybar,
      x=1cm,
      xtick=data,
      xticklabels from table={data.txt}{label},
      x tick label style={yshift={-mod(\ticknum,2)*1em}}
    ]
    \addplot table [x=x, y=y] {data.txt};
  \end{axis}
\end{tikzpicture}
\end{document}

相关内容