饼图颜色问题

饼图颜色问题

我对 chrome 和 safari 切片使用了相同的颜色,但是对于 safari,我在 Cyclelist 中添加了黄色

\begin{figure}[H]
\begin{center}
\def\angle{0}
\def\radius{3}
\def\cyclelist{{"brown","blue","red","green","yellow"}}
\newcount\cyclecount \cyclecount=-1
\newcount\ind \ind=-1
\begin{tikzpicture}[nodes = {font=\sffamily}]
  \foreach \percent/\name in {
      46.6/Chrome,
      24.6/Internet Explorer,
      20.4/Firefox,
      4.0/Other,
      5.1/Safari
    } {
      \ifx\percent\empty\else               % If \percent is empty, do nothing
        \global\advance\cyclecount by 1     % Advance cyclecount
        \global\advance\ind by 1            % Advance list index
        \ifnum3<\cyclecount                 % If cyclecount is larger than list
          \global\cyclecount=0              %   reset cyclecount and
          \global\ind=0                     %   reset list index
        \fi
        \pgfmathparse{\cyclelist[\the\ind]} % Get color from cycle list
        \edef\color{\pgfmathresult}         %   and store as \color
        % Draw angle and set labels
        \draw[fill={\color!50},draw={\color}] (0,0) -- (\angle:\radius)
          arc (\angle:\angle+\percent*3.6:\radius) -- cycle;
        \node at (\angle+0.5*\percent*3.6:0.7*\radius) {\percent\,\%};
        \node[pin=\angle+0.5*\percent*3.6:\name]
          at (\angle+0.5*\percent*3.6:\radius) {};
        \pgfmathparse{\angle+\percent*3.6}  % Advance angle
        \xdef\angle{\pgfmathresult}         %   and store in \angle
      \fi
    };
\end{tikzpicture}
\end{center}
\caption{***} 
\end{figure}

答案1

那行字

\ifnum3<\cyclecount 

只计算 4 个元素,因为数组索引从 0 开始,所以我们有 0、1、2、3。但是你的图表中有 5 个元素,所以应该达到 4。因此写

\ifnum4<\cyclecount 

应该可以解决问题。

但是,这会迫使你编辑此号码每一个每次更改语句中的元素数量时\foreach。因此,您可以写入一个高于列表最大索引的数字,或者 — 在我看来 — 更好的解决方案是向 foreach 添加计数并将其用作变量。

所以最后你应该得到:

\foreach \percent/\name [count=\countx] in {%
    ...
\ifnum\countx<\cyclecount

它将自动适应任意数量的元素,因为循环的最后一次“运行”将使用最后一个元素的索引。

相关内容