首页 > 解决方案 > LaTeX 中的甜甜圈饼图

问题描述

希望你好好的。我需要一些关于 LaTeX 的帮助。我想在 LaTeX 中插入这样的饼图。

在此处输入图像描述

但是我得到这个......

在此处输入图像描述

有人可以帮助我,以便我找到正确的输出。

我的代码是:

\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{backgrounds}
\pgfkeys{/donut/.cd,
inner radius/.initial=3.14cm,
inner radius=3.14cm,
outer radius/.initial=2cm,
outer radius=2cm,
text color/.initial=white,
text color=white}
\newcommand{\donutchart}[2][]{
   % Calculate total
   \pgfmathsetmacro{\totalnum}{0}
   \foreach [count=\n] \value/\colour/\name in {#2} {
     \pgfmathparse{\value+\totalnum}
     \global\let\totalnum=\pgfmathresult
     \xdef\numitems{\n}
   }

  \begin{tikzpicture}
  \pgfmathsetmacro{\wheelwidth}{\pgfkeysvalueof{/donut/outer
  radius}-\pgfkeysvalueof{/donut/inner radius}}
  \pgfmathsetmacro{\midradius}{(\pgfkeysvalueof{/donut/outer radius}
  +\pgfkeysvalueof{/donut/inner radius})/2}

  \begin{scope}[#1]

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

        \pgfmathsetmacro{\midangle}{-(\cumnum+\newcumnum)/2}
        \begin{scope}[on background layer]
          \filldraw[draw=white,fill=\colour]
          (-\cumnum:\pgfkeysvalueof{/donut/outer radius}) 
           arc(-\cumnum:-(\newcumnum):\pgfkeysvalueof{/donut/outer radius}) --
          (-\newcumnum:\pgfkeysvalueof{/donut/inner radius}) 
          arc(-\newcumnum:-(\cumnum):\pgfkeysvalueof{/donut/inner radius}) -- cycle;
        \end{scope}
        \draw node [text=\pgfkeysvalueof{/donut/text color}, 
        font=\bfseries\sffamily] at 
        (\midangle:{\pgfkeysvalueof{/donut/inner radius}+\wheelwidth/2}) {\name};

        \global\let\cumnum=\newcumnum
    }

  \end{scope}

  \end{tikzpicture}}



\begin{document}


 \donutchart[rotate=90]{51.1/blue/Only English, 24.4/orange/Spanish, 12.9/green/other indo european, 8.9/red/Asian, 2.7/purple/other}



\end{document}

标签: latexpie-chart

解决方案


快速破解:

\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{backgrounds}
\pgfkeys{/donut/.cd,
inner radius/.initial=3.14cm,
inner radius=3.14cm,
outer radius/.initial=2cm,
outer radius=2cm,
text color/.initial=white,
text color=white}
\newcommand{\donutchart}[2][]{
   % Calculate total
   \pgfmathsetmacro{\totalnum}{0}
   \foreach [count=\n] \value/\colour/\name in {#2} {
     \pgfmathparse{\value+\totalnum}
     \global\let\totalnum=\pgfmathresult
     \xdef\numitems{\n}
   }

  \begin{tikzpicture}
  \pgfmathsetmacro{\wheelwidth}{\pgfkeysvalueof{/donut/outer
  radius}-\pgfkeysvalueof{/donut/inner radius}}
  \pgfmathsetmacro{\midradius}{(\pgfkeysvalueof{/donut/outer radius}
  +\pgfkeysvalueof{/donut/inner radius})/2}

  \begin{scope}[#1]

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

        \pgfmathsetmacro{\midangle}{-(\cumnum+\newcumnum)/2}
        \begin{scope}[on background layer]
          \filldraw[draw=white,fill=\colour]
          (-\cumnum:\pgfkeysvalueof{/donut/outer radius}) 
           arc(-\cumnum:-(\newcumnum):\pgfkeysvalueof{/donut/outer radius}) --
          (-\newcumnum:\pgfkeysvalueof{/donut/inner radius}) 
          arc(-\newcumnum:-(\cumnum):\pgfkeysvalueof{/donut/inner radius}) -- cycle;
        \end{scope}
        \draw node [text=\pgfkeysvalueof{/donut/text color}, 
        font=\bfseries\sffamily] at 
        (\midangle:{\pgfkeysvalueof{/donut/inner radius}+\wheelwidth/2}) {\value \%};

        \global\let\cumnum=\newcumnum
    }
    
    \node[text width=\textwidth] at (-4,0) {
        \foreach \value/\colour/\name in {#2} {
           {\color{\colour}\textbullet}\space\name \hfill
        }    
    };
    
    \node at (0,0) {Languages};
    
  \end{scope}

  \end{tikzpicture}}



\begin{document}


 \donutchart[rotate=90]{51.1/blue/Only English, 24.4/orange/Spanish, 12.9/green/other indo european, 8.9/red/Asian, 2.7/purple/other}



\end{document}

在此处输入图像描述


推荐阅读