考虑下面的 MWE。我们如何调整图例周围的框的大小以使其与内容相匹配?
\documentclass{standalone}
\usepackage{pgfplots}
\begin{document}
\begin{tikzpicture}
\begin{axis}[width=6cm]
\addplot[domain=-2:2] {1};
\addlegendentry{$f(x)=\frac{1}{2\pi_{2_2}}$};
\addlegendentry{$f(x)=1$};
\end{axis}
\begin{scope}[shift={(5,0)}]
\begin{axis}[width=6cm]
\addplot[domain=-2:2] {1};
\addlegendentry{$f(x)=1$};
\end{axis}
\end{scope}
\end{tikzpicture}
\end{document}
正如您在下图(左)中看到的,材料的深度被忽略了。
答案1
对于不同情况,存在各种不同效果或多或少的方法。
1) 内部 yep
一个简单的解决方案是设置内部 y 分离legend style={inner ysep=5pt}
:
\documentclass{standalone}
\usepackage{pgfplots}
\begin{document}
\begin{tikzpicture}
\begin{axis}[width=6cm, legend style={inner ysep=5pt}]
\addplot[domain=-2:2] {1};
\addlegendentry{$f(x)=\frac{1}{2\pi_{2_2}}$};
\addlegendentry{$f(x)=1$};
\end{axis}
\begin{scope}[shift={(5,0)}]
\begin{axis}[width=6cm, legend style={inner ysep=5pt}]
\addplot[domain=-2:2] {1};
\addlegendentry{$f(x)=1$};
\end{axis}
\end{scope}
\end{tikzpicture}
\end{document}
但是您也增加了与上框边框的间隙:
2)文本深度
legend style={nodes={text depth=1.5mm}}
这是 @percusse 在评论中提到的一个非常优雅的解决方案。每个项目(包括最后一个项目)下面都添加了一些额外的空间,如果最后一个项目不是分数,这可能是不需要的。
3) 行分离
如果您有多个图例条目(您可能有,否则图例就毫无意义了) - 并且最后一个条目不包含分数,那么更改是row sep
更好的选择,因为它不会在顶部和底部添加间隙,只是在项目之间:
\documentclass{standalone}
\usepackage{pgfplots}
\begin{document}
\begin{tikzpicture}
\begin{axis}[width=6cm,legend style={row sep=5pt}]
\addplot[domain=-2:2] {1};
\addplot[domain=-2:2] {1};
\addlegendentry{$f(x)=\frac{1}{2\pi_{2_2}}$};
\addlegendentry{$f(x)=1$};
\end{axis}
\begin{scope}[shift={(5,0)}]
\begin{axis}[width=6cm]
\addplot[domain=-2:2] {1};
\addlegendentry{$f(x)=1$};
\end{axis}
\end{scope}
\end{tikzpicture}
\end{document}
4) parbox
\parbox
如果你只需要一个特定项目的解决方案,那么摆弄一下也可能是一个选择
\addlegendentry{\parbox[b][0.5cm][c]{2cm}{$f(x)=\frac{1\vphantom{2\pi^{2^2}}}{2\pi_{2_2}}$}};
5)半透明
由于这样的麻烦,我个人更喜欢这样:
\tikzset{semitransparent/.style = {draw=none, fill = white, fill opacity=0.8, text opacity = 1}}
进而
legend style={semitransparent}
在盒子上。