diff options
author | Xu Yuan <xu@informatik.hu-berlin.de> | 2011-10-01 22:30:00 +0200 |
---|---|---|
committer | Xu Yuan <xu@informatik.hu-berlin.de> | 2011-10-01 22:30:00 +0200 |
commit | 1e9baf6e684d2f4f29eaa9fe1f506ed1233904b7 (patch) | |
tree | 11bb6030d69bf8406318b709ce6f64bffd306eac /dev/pgf-pie.sty | |
parent | 651a3ad72e8b44d8fd0e03f1e93ac8b6c22890b6 (diff) | |
download | pgf-pie-1e9baf6e684d2f4f29eaa9fe1f506ed1233904b7.tar.gz pgf-pie-1e9baf6e684d2f4f29eaa9fe1f506ed1233904b7.tar.bz2 pgf-pie-1e9baf6e684d2f4f29eaa9fe1f506ed1233904b7.zip |
polar pie!
Diffstat (limited to 'dev/pgf-pie.sty')
-rw-r--r-- | dev/pgf-pie.sty | 39 |
1 files changed, 36 insertions, 3 deletions
diff --git a/dev/pgf-pie.sty b/dev/pgf-pie.sty index 0fa3b26..84cbb1c 100644 --- a/dev/pgf-pie.sty +++ b/dev/pgf-pie.sty @@ -50,6 +50,7 @@ chart by using PGF/Tikz package.] \newcounter{pgfpie@angleEnd} \newcounter{pgfpie@explodeLength} \newcounter{pgfpie@colorLength} +\newcounter{pgfpie@sliceLength} \def\setexplode#1\pgfeov{\def\explode{#1}} \pgfkeyslet{/explode/.@cmd}{\setexplode} @@ -81,8 +82,12 @@ chart by using PGF/Tikz package.] \def\setrotate#1\pgfeov{\xdef\rotate{#1}} \pgfkeyslet{/rotate/.@cmd}{\setrotate} +\newif\ifpolar +\pgfkeys{/polar/.is if=polar} + \newcommand{\pie}[2][] { + % load default parameters \pgfkeys{ explode=0, color={blue!60, cyan!60, yellow!60, orange!60, red!60, @@ -96,9 +101,12 @@ chart by using PGF/Tikz package.] text=label, sum=100, rotate=0, + polar=false, } + % load user's parameters \pgfkeys{#1} + % handle sum \ifthenelse{\equal{\sum}{auto}} { % sum all input @@ -111,7 +119,7 @@ chart by using PGF/Tikz package.] } {} - + % init counters \setcounter{pgfpie@explodeLength}{0} \foreach \e in \explode { \addtocounter{pgfpie@explodeLength}{1} } @@ -120,10 +128,35 @@ chart by using PGF/Tikz package.] \setcounter{pgfpie@angleEnd}{0} + \ifpolar + \setcounter{pgfpie@sliceLength}{0} + \xdef\maxValue{0} + \foreach \p/\e in {#2} { + \addtocounter{pgfpie@sliceLength}{1} + \ifnum \maxValue < \p + \xdef\maxValue{\p} + \fi + } + \pgfmathparse{\sum / \value{pgfpie@sliceLength}} + \xdef\polarangle{\pgfmathresult} + \pgfmathparse{\radius / \maxValue} + \xdef\polarRadiusUnit{\pgfmathresult} + \else + \xdef\theradius{\radius} + \fi + + % drawing loop \foreach \p/\t [count=\i from 0] in {#2} { \setcounter{pgfpie@angleBegin}{\value{pgfpie@angleEnd}} - \addtocounter{pgfpie@angleEnd}{\p} + \ifpolar + % Polar area diagram + \addtocounter{pgfpie@angleEnd}{\polarangle} + \xdef\theradius{\p*\polarRadiusUnit} + \else + % normal pie + \addtocounter{pgfpie@angleEnd}{\p} + \fi % find explode \pgfmathparse{int(mod(\i,\value{pgfpie@explodeLength}))} @@ -151,7 +184,7 @@ chart by using PGF/Tikz package.] {\t} {\theexplode} {\thecolor} - {\radius} + {\theradius} {\pos} {\style} } |