# How to draw Bar & Pie Chart

I'm want to include two graphs mentioned below in a document.

I'm able to draw pie charts using pgf-pie. Is there any package which is capable of generating BAR & PIE Chart both? [Also which is included in default LATEX installation] ?

-
Perhaps you want to try the relevant packages from the »datatool« bundle. – Thorsten Donig Sep 27 '13 at 16:33
Bar charts can be done with pgfplots (take a look at pgfplots). Pie charts are best not done. – Qrrbrbirlbel Sep 27 '13 at 16:33

For bar charts you can use pgfplots With TikZ you can setup some macros so that you can write pie charts like this:

\begin{tikzpicture}
[
pie chart,
slice type={comet}{blu},
slice type={legno}{rosso},
slice type={coltello}{giallo},
slice type={sedia}{viola},
slice type={caffe}{verde},
pie values/.style={font={\small}},
scale=2
]

\pie{2008}{73/comet,13/legno,7/sedia,7/coltello}
\pie[xshift=2.2cm,values of coltello/.style={pos=1.1}]%
{2009}{52/comet,23/legno,17/sedia,3/coltello,5/caffe}
\pie[xshift=4.4cm,values of caffe/.style={pos=1.1}]%
{2010}{56/comet,26/legno,9/sedia,7/coltello,2/caffe}

\legend[shift={(0cm,-1cm)}]{{Comet (Pordenone)}/comet, {Wood and furniture (Livenza)}/legno, {Knife (Maniago)}/coltello}
\legend[shift={(3cm,-1cm)}]{{Chair (Manzano)}/sedia, {Coffee (Trieste)}/caffe}

\end{tikzpicture}


Obtaining

The macros \pie and \legend and all the keys needed can be defined as follows:

\definecolor{rosso}{RGB}{220,57,18}
\definecolor{giallo}{RGB}{255,153,0}
\definecolor{blu}{RGB}{102,140,217}
\definecolor{verde}{RGB}{16,150,24}
\definecolor{viola}{RGB}{153,0,153}

\makeatletter

\tikzstyle{chart}=[
legend label/.style={font={\scriptsize},anchor=west,align=left},
legend box/.style={rectangle, draw, minimum size=5pt},
axis/.style={black,semithick,->},
axis label/.style={anchor=east,font={\tiny}},
]

\tikzstyle{bar chart}=[
chart,
bar width/.code={
\pgfmathparse{##1/2}
\global\let\bar@w\pgfmathresult
},
bar/.style={very thick, draw=white},
bar label/.style={font={\bf\small},anchor=north},
bar value/.style={font={\footnotesize}},
bar width=.75,
]

\tikzstyle{pie chart}=[
chart,
slice/.style={line cap=round, line join=round, very thick,draw=white},
pie title/.style={font={\bf}},
slice type/.style 2 args={
##1/.style={fill=##2},
values of ##1/.style={}
}
]

\pgfdeclarelayer{background}
\pgfdeclarelayer{foreground}
\pgfsetlayers{background,main,foreground}

\newcommand{\pie}[3][]{
\begin{scope}[#1]
\pgfmathsetmacro{\curA}{90}
\pgfmathsetmacro{\r}{1}
\def\c{(0,0)}
\node[pie title] at (90:1.3) {#2};
\foreach \v/\s in{#3}{
\pgfmathsetmacro{\deltaA}{\v/100*360}
\pgfmathsetmacro{\nextA}{\curA + \deltaA}
\pgfmathsetmacro{\midA}{(\curA+\nextA)/2}

\path[slice,\s] \c
-- +(\curA:\r)
arc (\curA:\nextA:\r)
-- cycle;
\pgfmathsetmacro{\d}{max((\deltaA * -(.5/50) + 1) , .5)}

\begin{pgfonlayer}{foreground}
\path \c -- node[pos=\d,pie values,values of \s]{$\v\%$} +(\midA:\r);
\end{pgfonlayer}

\global\let\curA\nextA
}
\end{scope}
}

\newcommand{\legend}[2][]{
\begin{scope}[#1]
\path
\foreach \n/\s in {#2}
{
++(0,-10pt) node[\s,legend box] {} +(5pt,0) node[legend label] {\n}
}
;
\end{scope}
}


This code needs polishing and is not very general but I am sharing it as I wrote it for a document I helped typeset. If you like it we can work out a better version.

-
Thanks for detail reply. Can you please suggest how to add legend in bar chart mentioned below: \begin{tikzpicture} \begin{axis}[ title=Title, xbar, xmajorgrids = true, bar width=6mm, width=12cm, height=5.5cm, enlarge y limits=0.2, xlabel={\#number}, symbolic y coords={A,B,C,D}, ytick=data, nodes near coords, nodes near coords align={horizontal}, ] \addplot coordinates {(1,A) (7,B) (5,C)(2,D)}; \end{axis} \end{tikzpicture} – Pawan Mude Sep 27 '13 at 19:22
well, you could use my \legend macro and put it right before the \end{tikzpicture}. – Bordaigorl Sep 27 '13 at 21:40
By the way this was quick and dirty code I put together some time ago, if anybody has suggestions on how to make it better, I'd be interested to hear them! – Bordaigorl Sep 27 '13 at 21:42
Thank You for your comments. – Pawan Mude Sep 28 '13 at 18:41
follow up question: tex.stackexchange.com/questions/157309/… – endo.anaconda Feb 3 '14 at 11:49

With PSTricks

\documentclass[pstricks,border=3pt]{standalone}
\degrees[100]
\newcounter{counter}
\SpecialCoor
\newcommand\data[2][gray]{%
}

\begin{document}
\begin{pspicture}(-4.5,-4.5)(4.5,4.5)
\data[red]{10}
\data[orange]{40}
\data[yellow]{30}
\data[blue]{20}
\end{pspicture}
\end{document}


-
To offset the angle, invoke \setcounter{counter}=<offset> before calling the first \data. – kiss my armpit Sep 27 '13 at 17:54
I meant \setcounter{counter}{<offset>}. – kiss my armpit Sep 28 '13 at 10:55