Take the 2-minute tour ×
TeX - LaTeX Stack Exchange is a question and answer site for users of TeX, LaTeX, ConTeXt, and related typesetting systems. It's 100% free, no registration required.

I have an xbar graph with some some data that I don't necessarily know the length of beforehand. Is there some way I can tell pgfplots to automatically expand the height of the chart according to the amount of data?

For example, in this example, there are so many data points that the bars overlap because the height is constant.

\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}

bar graph with overlapping bars

share|improve this question

1 Answer 1

up vote 17 down vote accepted

If you set the length of the y vector to a dimension with a unit, such as y=0.5cm, the chart will automatically stretch or shrink according to the number of entries.

To make all the bars fit into the chart area, you can set enlarge y limits={true, abs value=0.75}, which will add 0.75 units at the top and bottom of the chart, and to make the data labels fit, you can set enlarge x limits={upper, value=0.15}, which will add 15% extra space on the right edge of the chart.

Note that with bar and column charts, you should usually also set the minimum value, in this case xmin=0 to make sure the complete bars are visible.

And finally, pgfplots automatically loads tikz, so you don't need to load that package manually.

\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}
share|improve this answer
    
This works great, and thanks for fixing the other errors too! –  erjiang Oct 16 '11 at 3:48

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.