我很自豪地宣布我的文档里有大量的 PGFplots。
但是...我在整个情节中文本的垂直对齐方面遇到了一点小问题。
在 PGFPlots 中,将文本对齐到基线上的最简单方法是什么?我对多列图例中的文本对齐特别感兴趣,但也对轴上的文本对齐感兴趣。
\documentclass{standalone}
\usepackage{pgfplots}
\begin{document}
\begin{tikzpicture}
\begin{axis}[
y post scale=0.2,
legend style={at={(0.5,1.02)},anchor=south},
legend columns=3,
xmin=0,
ytick={one,two,eight},
symbolic y coords={one,two,eight},
bar width=7pt,
enlarge y limits=0.3
]
\addplot+[xbar] coordinates {(1,one)};
\addlegendentry{one}
\addplot+[xbar] coordinates {(2,two)};
\addlegendentry{two}
\addplot+[xbar] coordinates {(8,eight)};
\addlegendentry{eight}
\end{axis}
\end{tikzpicture}
\end{document}
在这里你可以看到,在图例中,文本根据文本块的高度居中(参见由于较短one
而高于基线的浮动,同上two
two
eight
),而不是根据自然文本基线。这也适用于是轴(并且对于X-轴也是如此)。
我可以通过附加幻影文本来解决这个问题,tg
以均衡我的各个标签的文本高度,但这会引入多余的水平空间,并且我有大量的图,希望特定的黑客攻击不是必要的。
我希望有一个解决方案,可以放在\pgfplotsset{ ... }
文档的头部,适用于所有图例和X&是斧头,但我愿意接受建议。
有人知道如何才能最好地实现普遍的文本对齐吗?
答案1
对于图例,添加
\strut
或(最好)自定义\mystrut
(例如\def\mystrut{\vphantom{hg}}
)有效(现在所有文本框都具有相同的深度和高度)。这可能也适用于 y 轴。也许font=
这些东西有关键点?
哦,是的,有:legend style
和y tick label style
。
我\vphantom{hg}
在这里使用是因为h
和g
是示例中最高和最深的字母。对于更通用的解决方案(实际文本,不同字体),我会使用非常高\strut
或更长的\vphantom
参数。
代码
\documentclass{standalone}
\usepackage{pgfplots}
\def\mystrut{\vphantom{hg}}
%\def\mystrut{\strut}
\pgfplotsset{
legend style={font=\mystrut},
y tick label style={font=\mystrut}
}
\begin{document}
\begin{tikzpicture}
\begin{axis}[
y post scale=0.2,
legend style={at={(0.5,1.02)},anchor=south},
legend columns=3,
xmin=0,
ytick={one,two,eight},
symbolic y coords={one,two,eight},
bar width=7pt,
enlarge y limits=0.3
]
\addplot+[xbar] coordinates {(1,one)};
\addlegendentry{one}
\addplot+[xbar] coordinates {(2,two)};
\addlegendentry{two}
\addplot+[xbar] coordinates {(8,eight)};
\addlegendentry{eight}
\end{axis}
\end{tikzpicture}
\end{document}