pgfplots:自动调整图表大小?

pgfplots:自动调整图表大小?

我有一个 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}

相关内容