Pgfplots:图例深度

Pgfplots:图例深度

考虑下面的 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}

在盒子上。

相关内容