在 pgfplots 中正确对齐基线上的垂直文本

在 pgfplots 中正确对齐基线上的垂直文本

我很自豪地宣布我的文档里有大量的 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而高于基线的浮动,同上twotwoeight),而不是根据自然文本基线。这也适用于轴(并且对于X-轴也是如此)。

我可以通过附加幻影文本来解决这个问题,tg以均衡我的各个标签的文本高度,但这会引入多余的水平空间,并且我有大量的图,希望特定的黑客攻击不是必要的。

我希望有一个解决方案,可以放在\pgfplotsset{ ... }文档的头部,适用于所有图例和X&斧头,但我愿意接受建议。

有人知道如何才能最好地实现普遍的文本对齐吗?

答案1

对于图例,添加\strut或(最好)自定义\mystrut(例如\def\mystrut{\vphantom{hg}})有效(现在所有文本框都具有相同的深度和高度)。这可能也适用于 y 轴。也许font=这些东西有关键点?

哦,是的,有:legend styley tick label style

\vphantom{hg}在这里使用是因为hg是示例中最高和最深的字母。对于更通用的解决方案(实际文本,不同字体),我会使用非常高\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}

输出

在此处输入图片描述

相关内容