pgfplots 中水平条的图例问题

pgfplots 中水平条的图例问题

我遇到了 pgfplots 图例中水平条的奇怪偏移问题。它们似乎被“向上”移动了一点,因此其中一部分隐藏在溢出之下。一张可以更快地解释这种情况的图片:

带图例的图片

要重现的最小 TeX(我正在用 进行编译pdflatex):

\documentclass{article}
\usepackage[utf8]{inputenc}
\usepackage{pgfplots}
\begin{document}
\begin{tikzpicture}
\begin{axis}[
    xbar,
    enlargelimits=0.25,
    legend style={},
    symbolic y coords={A,B,C},
    ytick=data,
    y tick label style={rotate=90},
    ]
\addplot coordinates {(2.5,A) (5.1,B) (5.1,C)};
\addplot coordinates {(7.1,A) (5.4,B) (8.7,C)};
\addplot coordinates {(6.5,A) (5.0,B) (2.0,C)};
\legend{legend1, legend2, legend3}
\end{axis}
\end{tikzpicture}
\end{document}

问:如何获得水平条的正确图像?对于我来说,预期的输出是有两个垂直条,就像 pgfplots 中的其他条形图例一样,例如在这里的问题中:图例条目中出现多个条形的原因

问:或者这样就正确了吗?如果正确,是否可以修改“缩略图”以显示其他内容?

答案1

更新

随着新的pgf图版本 1.13 OP 的代码按预期工作:

在此处输入图片描述

因此,如果您可以使用版本 1.13,则不再需要下面答案中的解决方法。


原始答案(与 1.12 版本一起使用):

正如您在文档或图像中看到的那样,pgfplots.code.texxbar legend定义为

/pgfplots/xbar legend/.style={
  /pgfplots/legend image code/.code={%
    \draw[##1,/tikz/.cd,bar width=3pt,yshift=-0.2em,bar shift=0pt]
    plot coordinates {(0cm,0.8em)(2*\pgfplotbarwidth,0.6em)};}
}

但我认为xy坐标应该互换:

/pgfplots/xbar legend/.style={
  /pgfplots/legend image code/.code={%
    \draw[##1,/tikz/.cd,bar width=3pt,yshift=-0.2em,bar shift=0pt]
    plot coordinates {(0.8em,0cm)(0.6em,2*\pgfplotbarwidth)};}% <- changed
}

在此处输入图片描述

代码:

\documentclass{article}
\usepackage[utf8]{inputenc}
\usepackage{pgfplots}
\pgfplotsset{
  /pgfplots/xbar legend/.style={
    /pgfplots/legend image code/.code={%
      \draw[##1,/tikz/.cd,bar width=3pt,yshift=-0.2em,bar shift=0pt]
      plot coordinates {(0.8em,0cm)(0.6em,2*\pgfplotbarwidth)};}% <- changed
  }
}
\begin{document}
\begin{tikzpicture}
\begin{axis}[
    xbar,
    enlargelimits=0.25,
    %legend style={},
    symbolic y coords={A,B,C},
    ytick=data,
    y tick label style={rotate=90}
    ]
\addplot coordinates {(2.5,A) (5.1,B) (5.1,C)};
\addplot coordinates {(7.1,A) (5.4,B) (8.7,C)};
\addplot coordinates {(6.5,A) (5.0,B) (2.0,C)};
\legend{legend1, legend2, legend3}
\end{axis}
\end{tikzpicture}
\end{document}

相关内容