Text und Stecknadel können im Tikz-Kreisdiagramm nicht in der richtigen Ausrichtung eingestellt werden

Text und Stecknadel können im Tikz-Kreisdiagramm nicht in der richtigen Ausrichtung eingestellt werden

Ich ändere das Kreisdiagramm, das verfügbar istHier. Bei kleinen Segmenten überlappt sich der Text innerhalb des Kreisdiagramms. Daher versuche ich, den Text und den Wert außerhalb des Diagramms zu schreiben. Unten ist mein modifizierter Latex-Code:

\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{shapes.geometric, arrows}

\makeatletter
\def\tikz@auto@anchor{%
    \pgfmathtruncatemacro\angle{atan2(\pgf@x,\pgf@y)-90}
    \edef\tikz@anchor{\angle}%
}
\makeatother

\begin{document}

\begin{figure}[h]
    \def\angle{0}
    \def\radius{2}
    \def\cyclelist{{"orange","blue","gray","red","green","cyan","magenta"}}

    \centering
    \newcount\cyclecount \cyclecount=-1
    \newcount\ind \ind=-1
    \begin{tikzpicture}[nodes = {font=\small}]
      \foreach \percent/\name in {
        2/3,
        2/4,
        2/5,
        18/7,
        13/8,
        63/9,
        } {
          \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
            \ifnum6<\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[fill={\color!50},draw={\color}] (0,0) -- (\angle:\radius)
              arc (\angle:\angle+\percent*3.6:\radius) -- cycle;
            \node[pin={[pin distance=1cm]\angle+0.5*\percent*3.6:{\name~[\percent\%]}}]
              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{figure}
\end{document}

Ich habe einige Antworten befolgt, die gegeben wurden fürWie kann ich den TikZ-Pin-Winkel erzwingen?Undpgfplot Pinlängeaber sie funktionieren nicht gut. Unten ist der Screenshot des generierten PDF-

Bildbeschreibung hier eingeben

Ich habe folgende Fragen-

  1. Wie man den Stift richtig ausrichtet, d. h. in Richtung Kreismittelpunkt
  2. Der Winkel, in dem Text und Pin ausgerichtet sind, muss die Hälfte des Winkels dieses Slices betragen

Antwort1

Ich würde die Verwendung dieser Option vermeiden pin(Sie müssen sowieso Positionen berechnen!)

\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{shapes.geometric, arrows}

\begin{document}

\begin{figure}[h]
    \def\angle{0}
    \def\radius{2}
    \def\labelradius{3}
    \def\cyclelist{{"orange","blue","gray","red","green","cyan","magenta"}}

    \centering
    \newcount\cyclecount \cyclecount=-1
    \newcount\ind \ind=-1
    \begin{tikzpicture}[nodes = {font=\small}]
      \foreach \percent/\name in {
        2/3,
        2/4,
        2/5,
        18/7,
        13/8,
        63/9,
        } {
          \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
            \ifnum6<\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[fill={\color!50},draw={\color}] (0,0) -- (\angle:\radius)
              arc (\angle:\angle+\percent*3.6:\radius) -- cycle;
            % \node[pin={[pin distance=1cm]\angle+0.5*\percent*3.6:{\name~[\percent\%]}}]
            %   at (\angle+0.5*\percent*3.6:\radius) {};
            \draw[draw=gray, shorten >=2pt] (\angle+0.5*\percent*3.6:\labelradius) node {\name~[\percent\%]} edge (\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{figure}
\end{document}

Vorschau

Antwort2

Eine PSTricks-Lösung:

\documentclass{article}

\usepackage{siunitx}
\usepackage{pstricks-add}

\def\slice[#1](#2)#3#4{
  \rput(psChartI#2){\SI{#3}{\tonne}}
  \ncline{psChartO#2}{psChart#2}
  \nput{#1}{psChartO#2}{#4}
}
% Use of the \slice macro:
% \slice%
% [position of outer node, relative to the line end-point]
% (slice number)
% {size of the slice, relative to the whole pie}
% {outer node}


\begin{document}

\begin{figure}
\def\before{54}
\def\under{594}
\def\after{890}
\centering
 \psset{
   unit = 2.8,
   nodesepB = -5pt
 }
  \begin{pspicture}(-1,-1.37)(1.5,1.4)
    \psChart[
      userColor = {red!70, green!70, blue!70},
      chartNodeO = 1.2,
      shadow = true,
      shadowsize = 5pt,
      linewidth = 0
    ]{\before, \under, \after}{}{}
    \slice[0](1){\before}{Before}
    \slice[90](2){\under}{Under}
    \slice[270](3){\after}{After}
  \end{pspicture}
 \caption{Distribution of something.}
 \label{fig:piechart}
\end{figure}
This is figure~\ref{fig:piechart}.

\end{document}

Ausgabe

Weitere Informationen zum \psChartMakro finden Sie unterSeite 16 im pstricks-addHandbuch.

Antwort3

Vielleicht möchten Sie überprüfendiese aktuelle FrageDie Form des Stifts kann geändert werden, aber die Grundidee ist da

verwandte Informationen