制作绘制图表的命令

制作绘制图表的命令

我知道还有其他在 LaTeX 中创建图表的解决方案,尤其是在 TiZ,但我遇到了以下问题。考虑这个 MWE 及其输出:

\documentclass[border=5pt,tikz]{standalone}
\newcommand{\dia}[2]{
    \pgfmathsetmacro{\a}{(#1/100)*360}
    \pgfmathsetmacro{\b}{(#2/100)*360}
    \pgfmathsetmacro{\cc}{100-(#1+#2)}
    \pgfmathsetmacro{\c}{(\cc/100)*360}
        \fill[blue] (1,0) arc(0:\a+\a:1) -- (0,0) -- cycle;
        \fill[green] (1,0) arc(0:\b+\c:1) -- (0,0) -- cycle;
        \fill[red] (1,0) arc(0:\c:1) -- (0,0) -- cycle;
            \draw[gray,ultra thick] (0,0) -- (\a+\a:1.01);
            \draw[gray,ultra thick] (0,0) -- (\b+\c:1.01);
            \draw[gray,ultra thick] (0,0) -- (\c:1.01);
    \fill[gray] (0,0) circle(.95);
}
\pagecolor{gray}
\begin{document}
\foreach \n in {0,5,...,45,40,35,...,0}
{
    \begin{tikzpicture}
        \useasboundingbox (-1,-1) rectangle (1,1);
%%      \fill[blue] (1,0) arc(0:120:1) --+ (0,-{sin(120)}) -- cycle;
%       \fill[blue] (1,0) arc(0:120:1) -- (0,0) -- cycle;
%%      \fill[green] (1,0) arc(0:75:1) --+ (0,-{sin(75)}) -- cycle;
%       \fill[green] (1,0) arc(0:75:1) -- (0,0) -- cycle;
            \dia{50}{\n}
    \end{tikzpicture}
}
\end{document}

截屏

我的问题是:

我如何创建一个命令,这样我只需要输入\dia{4}{20}{10}{50},就可以让 TiZ 知道,有四个数字需要处理;第一个数字代表 20%,第二个数字代表 10%,依此类推,最后一个数字是 100 - [所有前面的数字的总和]%?

答案1

在这里,我重写了您的宏,使其变成采用任意数量的百分比(以逗号分隔)和颜色的东西。最后一个百分比并不重要,因为最后一个条目定义了完成圆所需的最后一段的颜色。

\documentclass[border=5pt,tikz]{standalone}
\newcommand{\dia}[2][]{
    \foreach [count=\Z] \X/\Y in {#2}
    {\xdef\NumArcs{\Z}}
    \xdef\LastX{0}
    \foreach [count=\Z] \X/\Y in {#2}
    {
    \pgfmathsetmacro{\a}{(\LastX/100)*360}
    \ifnum\Z=\NumArcs
    \pgfmathsetmacro{\b}{360}
    \else
    \pgfmathsetmacro{\b}{((\LastX+\X)/100)*360}
    \fi
    \draw[\Y,line width=1mm] (180-\a:1) arc(180-\a:180-\b:1);
    \draw[gray,ultra thick] (0,0) -- (180-\a:1.05);
    \draw[gray,ultra thick] (0,0) -- (180-\b:1.05);
    \pgfmathsetmacro{\LastX}{\LastX+\X}
    \xdef\LastX{\LastX}
    }       
    \fill[gray] (0,0) circle(.95);
}
\pagecolor{gray}
\begin{document}
\foreach \n in {0,5,...,45,40,35,...,0}
{
    \begin{tikzpicture}
        \useasboundingbox (-1,-1) rectangle (1,1);
            \dia{10/red,\n/green,45/blue,0/purple}
    \end{tikzpicture}
}
\end{document}

在此处输入图片描述

相关内容