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.

To make it short, I am searching for a 2D variant of this plot How to design a 3D donut pie chart with pgf-plot? Especially the label for each segment are important for my application. I don't need any stylish shading, segments should have constant colour.

I hope someone could help me to create a diagram like this, because i am quite new to LaTeX and the whole package stuff :)

share|improve this question
1  
Something like this: tex.stackexchange.com/a/18105/2552? –  Jake Nov 14 '12 at 16:38
    
yes, without the "smaller" segments and with lines to the labels –  MrMuh Nov 14 '12 at 16:55

1 Answer 1

up vote 13 down vote accepted

Adapted from How can I produce a 'ring (or wheel) chart' like that on page 88 of the PGF manual?, created using the line

\wheelchart{26/cyan/Corporate,  28/orange/Plastique, 33.5/yellow/Chimique, 12.5/blue!50!red/Rhodia}

\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{arrows}
\begin{document}

% Adjusts the size of the wheel:
\def\innerradius{1.8cm}
\def\outerradius{2.2cm}

% The main macro
\newcommand{\wheelchart}[1]{
    % Calculate total
    \pgfmathsetmacro{\totalnum}{0}
    \foreach \value/\colour/\name in {#1} {
        \pgfmathparse{\value+\totalnum}
        \global\let\totalnum=\pgfmathresult
    }

    \begin{tikzpicture}

      % Calculate the thickness and the middle line of the wheel
      \pgfmathsetmacro{\wheelwidth}{\outerradius-\innerradius}
      \pgfmathsetmacro{\midradius}{(\outerradius+\innerradius)/2}

      % Rotate so we start from the top
      \begin{scope}[rotate=90]

      % Loop through each value set. \cumnum keeps track of where we are in the wheel
      \pgfmathsetmacro{\cumnum}{0}
      \foreach \value/\colour/\name in {#1} {
            \pgfmathsetmacro{\newcumnum}{\cumnum + \value/\totalnum*360}

            % Calculate the percent value
            \pgfmathsetmacro{\percentage}{\value/\totalnum*100}
            % Calculate the mid angle of the colour segments to place the labels
            \pgfmathsetmacro{\midangle}{-(\cumnum+\newcumnum)/2}

            % This is necessary for the labels to align nicely
            \pgfmathparse{
               (-\midangle<180?"west":"east")
            } \edef\textanchor{\pgfmathresult}
            \pgfmathsetmacro\labelshiftdir{1-2*(-\midangle>180)}

            % Draw the color segments. Somehow, the \midrow units got lost, so we add 'pt' at the end. Not nice...
            \fill[\colour] (-\cumnum:\outerradius) arc (-\cumnum:-(\newcumnum):\outerradius) --
            (-\newcumnum:\innerradius) arc (-\newcumnum:-(\cumnum):\innerradius) -- cycle;

            % Draw the data labels
            \draw  [*-,thin] node [append after command={(\midangle:\midradius pt) -- (\midangle:\outerradius + 1ex) -- (\tikzlastnode)}] at (\midangle:\outerradius + 1ex) [xshift=\labelshiftdir*0.5cm,inner sep=0pt, outer sep=0pt, ,anchor=\textanchor]{\name: \pgfmathprintnumber{\percentage}\%};


            % Set the old cumulated angle to the new value
            \global\let\cumnum=\newcumnum
        }

      \end{scope}
%      \draw[gray] (0,0) circle (\outerradius) circle (\innerradius);
    \end{tikzpicture}
}

% Usage: \wheelchart{<value1>/<colour1>/<label1>, ...}
\wheelchart{26/cyan/Corporate,  28/orange/Plastique, 33.5/yellow/Chimique, 12.5/blue!50!red/Rhodia}

\end{document}
share|improve this answer
    
awsome work! but i have a problem when using \usepackage{ngerman} \usepackage[ngerman]{babel}. do you know how to fix the problem (! Missing { inserted.) ? –  MrMuh Nov 14 '12 at 17:38
    
@MrMuh: I don't have that problem. What versions of ngerman, babel and tikz are you using? (I'm using v2.5e, v3.8m and v2.10, respectively) –  Jake Nov 14 '12 at 18:01
1  
This is very nice! It definitely belongs into a TikZ or pgfplots library! –  Alexander Nov 14 '12 at 18:24
    
@Jake: Wow. The most impressive part for me is how the labels are placed! Still trying to figure it out -- Soooooo much still to learn... –  Peter Grill Nov 14 '12 at 19:15
    
@Jake: I agree with Peter.. that's really a cool approach. This definitely should become a package! –  Claudio Fiandrino Nov 14 '12 at 19:40

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.