4

As stated in the title, I would like to draw a white line/gap after each sector in my donut chart. At present, a code I am using is producing amazing donut chart but it would be great if there is white line/gap after each sector.

Here is a chart that my code is producing at this moment:

enter image description here

MWE:

\documentclass{article}
\usepackage{tikz}
%%%%%%%%%%%%%%%%%
%Donut Chart
%%%%%%%%%%%%%%%%%%%%
\def\innerradius{0.7cm}
\def\outerradius{1.9cm}
\pgfmathsetlengthmacro{\centerradius}{(\outerradius + \innerradius)/2}
\pgfmathsetlengthmacro{\donutcenter}{\innerradius/2}
 % The Macro
\newcommand{\donutchart}[1]{
   % Calculate total
   \pgfmathsetmacro{\totalnum}{0}
   \foreach \value/\colour/\name in {#1} {
     \pgfmathparse{\value+\totalnum}
     \global\let\totalnum=\pgfmathresult
   }

  \begin{tikzpicture}

  \pgfmathsetmacro{\wheelwidth}{\outerradius-\innerradius}
  \pgfmathsetmacro{\midradius}{(\outerradius+\innerradius)/2}

  \begin{scope}[rotate=90]

    \pgfmathsetmacro{\cumnum}{0}
    \foreach \value/\colour/\name in {#1} {
        \pgfmathsetmacro{\newcumnum}{\cumnum + \value/\totalnum*360}

        \pgfmathsetmacro{\midangle}{-(\cumnum+\newcumnum)/2}

        \fill[\colour] (-\cumnum:\outerradius) arc (-\cumnum:-(\newcumnum):\outerradius) --
        (-\newcumnum:\innerradius) arc (-\newcumnum:-(\cumnum):\innerradius) -- cycle;

        \fill[darkgray!25] circle (\innerradius);

        \draw node [text=white, font=\bfseries] at (\midangle:{\innerradius+\wheelwidth/2}) {\name};

        \node[scale=1.0, color=black, font=\bfseries](\innerradius) {A};

        \global\let\cumnum=\newcumnum
    }

  \end{scope}

  \end{tikzpicture}}

\begin{document}

 \donutchart{15/blue/A1,15/green/A2, 15/red/A3, 15/orange/A4, 10/teal/A5, 10/violet/A6, 20/purple/A7}

\end{document}

2 Answers2

5

Use \filldraw instead of \fill:

\documentclass{article}
\usepackage{tikz}
%%%%%%%%%%%%%%%%%
%Donut Chart
%%%%%%%%%%%%%%%%%%%%
\def\innerradius{0.7cm}
\def\outerradius{1.9cm}
\pgfmathsetlengthmacro{\centerradius}{(\outerradius + \innerradius)/2}
\pgfmathsetlengthmacro{\donutcenter}{\innerradius/2}
 % The Macro
\newcommand{\donutchart}[1]{
   % Calculate total
   \pgfmathsetmacro{\totalnum}{0}
   \foreach \value/\colour/\name in {#1} {
     \pgfmathparse{\value+\totalnum}
     \global\let\totalnum=\pgfmathresult
   }

  \begin{tikzpicture}

  \pgfmathsetmacro{\wheelwidth}{\outerradius-\innerradius}
  \pgfmathsetmacro{\midradius}{(\outerradius+\innerradius)/2}

  \begin{scope}[rotate=90]

    \pgfmathsetmacro{\cumnum}{0}
    \foreach \value/\colour/\name in {#1} {
        \pgfmathsetmacro{\newcumnum}{\cumnum + \value/\totalnum*360}

        \pgfmathsetmacro{\midangle}{-(\cumnum+\newcumnum)/2}

        \filldraw[draw=white,fill=\colour] (-\cumnum:\outerradius) arc (-\cumnum:-(\newcumnum):\outerradius) --
        (-\newcumnum:\innerradius) arc (-\newcumnum:-(\cumnum):\innerradius) -- cycle;

        \fill[darkgray!25] circle (\innerradius);

        \draw node [text=white, font=\bfseries] at (\midangle:{\innerradius+\wheelwidth/2}) {\name};

        \node[scale=1.0, color=black, font=\bfseries](\innerradius) {A};

        \global\let\cumnum=\newcumnum
    }

  \end{scope}

  \end{tikzpicture}}

\begin{document}

 \donutchart{15/blue/A1,15/green/A2, 15/red/A3, 15/orange/A4, 10/teal/A5, 10/violet/A6, 20/purple/A7}

\end{document}

enter image description here

Ulrike Fischer
  • 327,261
0

gap option from wheelchart package does it.

\documentclass[tikz, border=2mm]{standalone}
\usepackage{wheelchart}
\usepackage{lmodern}

\begin{document}

\begin{tikzpicture}\wheelchart[ gap, middle fill=gray!30, middle style={font=\LARGE\bfseries}, middle={A}, radius={1}{2.5}, data={}, wheel data style={text=white, font=\Large\bfseries}, wheel data={\WCvarC}, wheel data pos=0.5, ]{% 15/blue/A1, 15/green/A2, 15/orange/A4, 10/teal/A5, 10/violet/A6, 20/purple/A7} \end{tikzpicture}

\end{document}

enter image description here

Ignasi
  • 136,588