是否可以自动更改 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}