我有一个 xbar 图,其中包含一些数据,但我事先并不知道它们的长度。有什么方法可以告诉 pgfplots 根据数据量自动扩展图表的高度吗?
例如,在此示例中,数据点非常多,以至于条形图重叠,因为高度是恒定的。
\documentclass[letterpaper]{article}
\usepackage{tikz}
\usepackage{pgfplots}
\begin{filecontents}{my.dat}
Label value num
992 70 1
993 120 2
994 30 3
995 330 4
999 50 5
988 50 6
989 50 7
983 50 8
973 50 9
963 50 10
953 50 11
941 60 12
942 70 13
943 20 14
944 30 15
945 10 16
\end{filecontents}
\begin{document}
\begin{tikzpicture}
\begin{axis}[
xbar,
xlabel=My value,
ylabel=Label here,
xmajorgrids=true,
ytick=data,
yticklabels from table={my.dat}{Label},
nodes near coords,
]
\addplot table [x=value, y=num]
{my.dat};
\end{axis}
\end{tikzpicture}
\end{document}
答案1
如果将 y 向量的长度设置为具有单位的维度,例如y=0.5cm
,图表将根据条目数量自动拉伸或收缩。
为了使所有条形图都适合图表区域,您可以设置enlarge y limits={true, abs value=0.75}
,这将在图表的顶部和底部添加 0.75 个单位;为了使数据标签适合,您可以设置enlarge x limits={upper, value=0.15}
,这将在图表的右边缘添加 15% 的额外空间。
请注意,对于条形图和柱形图,通常还应设置最小值,在这种情况下xmin=0
确保完整的条形图可见。
最后,pgfplots
自动加载tikz
,因此您不需要手动加载该包。
\documentclass[letterpaper]{article}
\usepackage{pgfplots}
\begin{filecontents}{my.dat}
Label value num
992 70 1
993 120 2
994 30 3
995 330 4
999 50 5
988 50 6
989 50 7
983 50 8
973 50 9
963 50 10
953 50 11
941 60 12
942 70 13
943 20 14
944 30 15
945 10 16
\end{filecontents}
\begin{document}
\begin{tikzpicture}
\begin{axis}[
xbar,
y=0.5cm, enlarge y limits={true, abs value=0.75},
xmin=0, enlarge x limits={upper, value=0.15},
xlabel=My value,
ylabel=Label here,
xmajorgrids=true,
ytick=data,
yticklabels from table={my.dat}{Label},
nodes near coords, nodes near coords align=horizontal
]
\addplot table [x=value, y=num]
{my.dat};
\end{axis}
\end{tikzpicture}
\end{document}