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 want your help in drawing the following figure. I think it is called as stacked bar graph. enter image description here

share|improve this question
7  
Search the pgfplots documentation for "ybar stacked". –  erik Apr 12 '13 at 5:50

1 Answer 1

up vote 6 down vote accepted

This type of graph is easy to produce with the pgfplots package. See below for an example. For more details on ybar stacked graphs, see p77 of the pgfplots manual.

You should also consider transforming your ybar stacked graph into an xbar stacked graph (see p78 of the pgfplots manual); those tend to be easier to parse.

EDIT: I have shamelessly adapted Jake's very detailed answer to Center nodes near coords in a stacked ybar plot to add values in the bars:

enter image description here

\documentclass{article}

\usepackage{pgfplots}

\pgfplotstableread{
1   15  12  03  24  16  19
2   15  12  03  24  16  19
3   15  12  03  24  16  19
4   15  12  03  24  16  19
5   15  12  03  24  16  19
6   15  12  03  24  16  19  
}\datatable

\makeatletter
\pgfplotsset{
    calculate offset/.code={
        \pgfkeys{/pgf/fpu=true,/pgf/fpu/output format=fixed}
        \pgfmathsetmacro\testmacro{%
            (\pgfplotspointmeta*10^\pgfplots@data@scale@trafo@EXPONENT@y)%
            /2*\pgfplots@y@veclength)%
        }
        \pgfkeys{/pgf/fpu=false}
        },
    nodes near coords vertically centered/.style={
        every node near coord/.append style={
            /pgfplots/calculate offset,
            yshift=-\testmacro
        },
        nodes near coords align=center
    }
}
\makeatother

\begin{document}
\begin{tikzpicture}
\begin{axis}[
    ybar stacked,%
    bar width=15pt,%
    legend style={%
        at={(0,0)},%
        anchor=west,%
        at={(axis description cs:1.05,+0.5)}},%
    reverse legend,%
    xtick={1,2,...,6},%
    xticklabels={1,2,3,4,5,6},%
    enlarge x limits=0.1,%
    enlarge y limits=false,%
    ymin=0,%
    ymax=100.01,%
    ytick={0,10,...,100},%
    yticklabels={0\%,10\%,20\%,30\%,40\%,50\%,60\%,70\%,80\%,90\%,100\%},%
    xlabel={\textbf{Company}},%
    ylabel={\textbf{\% Distribution of efforts}},%
    point meta=explicit,
    nodes near coords={\pgfmathprintnumber[fixed zerofill,precision=1]{\pgfplotspointmeta}
    },
    every node near coord/.style={%
        check for zero/.code={ %
            \pgfmathfloatifflags{\pgfplotspointmeta}{0}{%
                \pgfkeys{/tikz/coordinate}%
            }{}%
        },%
        check for zero,%
        fill=white,%
        fill opacity=0.75,%
        text opacity=1,%
        font=\scriptsize,%
        inner ysep=0.5pt,%
    },%
    nodes near coords vertically centered,%
]
\addplot table [y=1, meta=1] \datatable;
\addlegendentry{A}
\addplot table [y=2, meta=2] \datatable;
\addlegendentry{B}
\addplot table [y=3, meta=3] \datatable;
\addlegendentry{C}
\addplot table [y=4, meta=4] \datatable;
\addlegendentry{D}
\addplot table [y=5, meta=5] \datatable;
\addlegendentry{E}
\addplot table [y=6, meta=6] \datatable;
\addlegendentry{F}
\end{axis}
\end{tikzpicture}
\end{document}
share|improve this answer
    
Thanks Jubobs.. Is there a way to also write in the values in the bars as given in the picture? –  Divya Apr 12 '13 at 10:39

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.