9

I've gone through the answer in Package for pie charts.

Can you please suggest, how to give different color for each pie?

1

3 Answers 3

9
\documentclass{article}

\usepackage{calc}
\usepackage{ifthen}
\usepackage{tikz}
\begin{document}
\newcommand{\slice}[5]{ %% use 5 arguments here
  \pgfmathparse{0.5*#1+0.5*#2}
  \let\midangle\pgfmathresult

  % slice %% I changed !10 to !30 to get darker color
  % use the fifth argument #5 to pass the color  
  \draw[thick,fill=#5!30] (0,0) -- (#1:1) arc (#1:#2:1) -- cycle;

  % outer label
  \node[label=\midangle:#4] at (\midangle:1) {};

  % inner label
  \pgfmathparse{min((#2-#1-10)/110*(-0.3),0)}
  \let\temp\pgfmathresult
  \pgfmathparse{max(\temp,-0.5) + 0.8}
  \let\innerpos\pgfmathresult
  \node at (\midangle:\innerpos) {#3};
}

\begin{tikzpicture}[scale=3]

\newcounter{a}
\newcounter{b}
%% -------------- use the new variable \c to pass the color
\foreach \p/\t/\c in {20/type A/red, 4/type B/blue, 11/type C/red,
                   49/type D/green, 16/other/yellow}
  {
    \setcounter{a}{\value{b}}
    \addtocounter{b}{\p}
    \slice{\thea/100*360}
          {\theb/100*360}
          {\p\%}{\t}{\c}  %% here we use the fifth variable
  }

\end{tikzpicture}

\end{document}

enter image description here

0
8

Just for fun with PSTricks.

\documentclass[pstricks,border=12pt,10pt]{standalone}
\SpecialCoor

\newcounter{sum}
\addtocounter{sum}{0}

\psset{fillstyle=solid,opacity=.5,linejoin=1}
\degrees[100]

\newcommand\Item[3][red]{%
    \pstVerb{/IA \thesum\space def /FA IA #2 add def}%
    \pswedge[fillcolor=#1]{3}{!IA}{!FA}%
    \uput{1.5}[!IA FA add 2 div](0,0){\scriptsize #2\%}%
    \uput{3.2}[!IA FA add 2 div](0,0){#3}%
    \addtocounter{sum}{#2}%
    \ignorespaces
}

\begin{document}
\begin{pspicture}(-4,-4)(4,4)
\Item{20}{type A}
\Item[blue]{4}{type B}
\Item{11}{type C}
\Item[green]{49}{type D}
\Item[yellow]{\the\numexpr100-\thesum\relax}{other}
\end{pspicture}
\end{document}

enter image description here

1
  • 1
    My answer for another simpler question can be found here. Commented Dec 23, 2013 at 20:11
6

with chartColor=color you'll get the predefined colors instead of the user defined.

\documentclass[pstricks,border=12pt]{standalone}
\usepackage{pstricks-add}

\begin{document}
 \psset{unit=1.5}
 \begin{pspicture}(-3,-3)(3,3)
 \psChart[userColor={red!40,green!50,blue!40,gray,cyan!50,
 magenta!80,cyan},chartSep=30pt,shadow=true,shadowsize=5pt
]{20,4,11,49,16}{3}{2}
 \psset{nodesepA=5pt,nodesepB=-10pt}
 \ncline{psChartO1}{psChart1}\nput{0}{psChartO1}{20\%}
 \ncline{psChartO2}{psChart2}\nput{150}{psChartO2}{4\%}
 \ncline{psChartO3}{psChart3}\nput{90}{psChartO3}{11\%}
 \ncline{psChartO4}{psChart4}\nput{-90}{psChartO4}{49\%}
 \ncline{psChartO5}{psChart5}\nput{0}{psChartO5}{16\%}
 \bfseries%
 \rput(psChartI1){type A}\rput[b](psChartI2){type B}
 \rput[t](psChartI3){type C}
 \rput(psChartI4){type D}\rput(psChartI5){other}
 \end{pspicture}
\end{document}

enter image description here

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .