我遇到了 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.tex
它xbar 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)};}
}
但我认为x
和y
坐标应该互换:
/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}