latex - 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}
解决方案
快速破解:
\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}
推荐阅读
- c# - 使用 LINQ 或等效工具来格式化 List 对象的控制台输出
- xslt-2.0 - 如何获取未包装的文本
使用 XSLT 复制标签?
- ios - 将 L2CAP 通道与 CoreBluetooth 一起使用
- python - 基于可用操作系统库版本的 pip 要求
- groovy - Groovy JMeter 传递带空格的字符串,避免 %20
- ruby - 如何从大字符串中提取文本并进行更改
- python - 为什么 Django 错误消息有空的类扩展?
- angular - 从组件到控制器访问输入属性值Angular 6
- ios - 成功构建应用程序后 Xcode 存档错误
- typescript - 通过“is”运算符和条件类型缩小泛型类型