参见下图:
\documentclass[12pt,border=5mm]{standalone}
\usepackage{pgfplots}
\pgfplotsset{compat=newest}
\usepgfplotslibrary{groupplots}
\begin{document}
\begin{tikzpicture}
\begin{groupplot}[
group style={group size=2 by 1,horizontal sep=5cm},
title style = {align=center},
xbar,
point meta=explicit symbolic,
nodes near coords,
nodes near coords align = {right},
y axis line style = { opacity = 0 },
axis x line = none,
tickwidth = 0pt,
y dir = reverse
]
\nextgroupplot[
ytick={1,2},
yticklabels={A,B},
title={First graph}
]
\addplot coordinates {
(20,1) [20]
(10,2) [10]
};
\nextgroupplot[
title={Second graph},
ytick={1,2},
yticklabels={A,Looooooooooong B}
]
\addplot coordinates {
(20,1) [20]
(30,2) [30]
};
\end{groupplot}
\end{tikzpicture}
\end{document}
此图令人困惑。为了能够比较这两个图,第一个图中的条形“20”应与第二个图中的条形“20”一样长。此外,第二个图中的条形“30”应为第一个图中的条形“10”的 3 倍长。
我该如何解决这个问题?
我尝试了在看似相关的帖子中找到的一些修复方法,就像这个或者这个,但它们似乎对我的情况不起作用。我想我只是不明白为什么缩放在 中会这样工作pgfplots
。
例如,我认为添加x=1cm
选项\begin{groupplot}
可以解决我的问题,我的理由是它会告诉pgfplots
无论图表如何,1 个单位必须始终为 1cm。但这只会让问题变得更糟:
然后我想也许我应该重新调整第二张图的 x 轴。由于第二张图中的最大数字 30 比第一张图中的最大数字 20 大 50%,也许添加x post scale = 1.5
第二张图会有帮助?但没有:
我相信问题可能来自于第二张图表中有一个长标签,但添加该scale only axis
选项并不能解决问题。
我甚至不需要自动化解决方案,只需要图中的 10 占用相同的空间。
答案1
您需要做的就是添加,xmin=0
例如x=2mm,y=2cm
。
\documentclass[12pt,border=5mm]{standalone}
\usepackage{pgfplots}
\pgfplotsset{compat=newest}
\usepgfplotslibrary{groupplots}
\begin{document}
\begin{tikzpicture}
\begin{groupplot}[x=2mm,y=2cm,
group style={group size=2 by 1,horizontal sep=5cm},
title style = {align=center},
xbar,xmin=0,
point meta=explicit symbolic,
nodes near coords,
nodes near coords align = {right},
y axis line style = { opacity = 0 },
axis x line = none,
tickwidth = 0pt,
y dir = reverse
]
\nextgroupplot[
ytick={1,2},
yticklabels={A,B},
title={First graph}
]
\addplot coordinates {
(20,1) [20]
(10,2) [10]
};
\nextgroupplot[
title={Second graph},
ytick={1,2},
yticklabels={A,Looooooooooong B}
]
\addplot coordinates {
(20,1) [20]
(30,2) [30]
};
\end{groupplot}
\end{tikzpicture}
\end{document}