将百分比放在饼图之外

将百分比放在饼图之外

不幸的是,您无法读取小饼块中的百分比。有没有简单的解决方案?将百分比放在饼图外面还是放在图例中?

\documentclass{article}
\usepackage{pgf-pie,stackengine}

\begin{document}
\begin{figure}[h!]
\centering
\begin{tikzpicture}
\small
\pie[radius=2, color={cyan!90, green!70, blue!40, magenta!90}, text=legend]{13.52/Opernveranstaltungen, 1.19/Operettenveranstaltungen, 3.58/Musicalveranstaltungen, 81.7/andere Veranstaltungen}
\end{tikzpicture}
\caption[Veranstaltungen]{Veranstaltungen}
\label{fig:verteilung_theatertypen}
\end{figure}


\end{document}

在此处输入图片描述

答案1

我有两种方法。第一种方法基于pgf-pieOP 所用的 ,第二种方法基于不同的方法。

方法 1

这里,我画了三个同心饼图来实现结果。

同心圆方法是第一个饼图绘制图例并将切片值放在图表上(这对于薄切片不利)。第二个同心圆图表仅重新绘制那些太薄的切片,并要求省略切片内的编号,而是使用外围的外部文本区域重申切片值(我也必须这样做\raisebox)。最后一个图重新绘制了 13.52% 的切片,其中可以包含标签。

\documentclass{article}
\usepackage{pgf-pie}
\begin{document}
\begin{figure}[h!]
\centering
\begin{tikzpicture}
\small
\pie[radius=2, color={cyan!90, green!70, blue!40, magenta!90},text=legend]{13.52/Opernveranstaltungen, 1.19/Operettenveranstaltungen, 3.58/Musicalveranstaltungen, 81.7/andere Veranstaltungen}
\pie[hide number, radius=2, color={cyan!90, green!70, blue!40}]%
  {13.52/, 1.19/\!1.19\%, 3.58/\raisebox{3pt}{$\!\!3.58\%$}}
\pie[radius=2, color={cyan!90, green!70, blue!40}]{13.52/}
\end{tikzpicture}
\caption[Veranstaltungen]{Veranstaltungen}
\label{fig:verteilung_theatertypen}
\end{figure}
\end{document}

在此处输入图片描述

方法 2

我只是尝试调整我的答案带外部文本的饼图。在这里,我检查百分比值...如果小于 3,标签将放在外面。我提供了一个参数来移动标签以防止重叠,并且还提供了颜色规范。

\documentclass{article}
\newcounter{a}
\newcounter{b}
\usepackage{tikz}
\begin{document}
\def\trunc#1.#2\relax{#1}
\newcommand{\slice}[6]{
        \pgfmathparse{0.5*#2+0.5*#3}
        \let\midangle\pgfmathresult

        % slice
        \draw[thick,fill=#1] (0,0) -- (#2:1) arc (#2:#3:1) -- cycle;

        % outer label
        \node[label=\midangle:#5] at (\midangle:1#6) {};

        % inner label
        \pgfmathparse{min((#3-#2-10)/110*(-0.3),0)}
        \let\temp\pgfmathresult
        \pgfmathparse{max(\temp,-0.5) + 0.8}
        \let\innerpos\pgfmathresult
        \node at (\midangle:\innerpos) {#4};
    }
    \begin{figure} [!htbp]
    \begin{center}
        \begin{tikzpicture}[scale=3]

        \newcounter{c}
        \newcounter{d}
        \foreach \p/\d/\cc in {
          13.52//cyan!90, 
          1.19/-.04/green!70, 
          3.58/.03/blue!40, % PCT/OUTER LABEL DECIMAL SHIFT/COLOR
          81.7//magenta!90}
        {
            \setcounter{a}{\theb}
            \pgfmathparse{int(100*\p)}
            \addtocounter{b}{\pgfmathresult}
            \slice{\cc}{\thea/10000*360}
            {\theb/10000*360}
            {\ifnum\expandafter\trunc\p\relax>3\relax\p\%\fi}% <- CUTOFF OF 3%
            {\ifnum\expandafter\trunc\p\relax>3\relax\else\p\%\fi}
            {\d}
        }

        \end{tikzpicture}
    \end{center}

    \caption{My pie}
\end{figure}
\end{document}

在此处输入图片描述

答案2

轮图我写的包,可以使用。

定义一个命令\WCtest,其输出取决于百分比是否大于 10。此命令用于键datawheel data。此处,使用 来获取百分比\WCperc

图例由键决定legend。这是一个tabular放置在 中的\node。行由键决定legend row。可以使用 获得所有行的结果\WClegend

在此处输入图片描述

\documentclass[border=6pt]{standalone}
\usepackage{wheelchart}
\usepackage{siunitx}
\begin{document}
\begin{tikzpicture}
\def\WCtest#1#2{%
  \pgfmathparse{\WCpercentage>10?"#1":"#2"}%
  \pgfmathresult%
}
\wheelchart[
  anchor xsep=35,
  anchor ysep=55,
  counterclockwise,
  data=\WCtest{}{\WCperc},
  legend row={\tikz\fill[\WCvarB,draw=black] (0,0) rectangle (0.3,0.3); & \WCvarC},
  legend={
    \node[anchor=west] at (2.5,0) {%
      \begin{tabular}{l@{ }l}%
      \WClegend%
      \end{tabular}%
    };
  },
  perc precision=2,
  radius={0}{2},
  slices style={\WCvarB,draw=black},
  start angle=0,
  wheel data=\WCtest{\WCperc}{}
]{%
  13.52/cyan!90/Opernveranstaltungen,
  1.19/green!70/Operettenveranstaltungen,
  3.58/blue!40/Musicalveranstaltungen,
  81.7/magenta!90/andere Veranstaltungen%
}
\end{tikzpicture}
\end{document}

相关内容