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-
Ich habe folgende Fragen-
- Wie man den Stift richtig ausrichtet, d. h. in Richtung Kreismittelpunkt
- 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}
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}
Weitere Informationen zum \psChart
Makro finden Sie unterSeite 16 im pstricks-add
Handbuch.
Antwort3
Vielleicht möchten Sie überprüfendiese aktuelle FrageDie Form des Stifts kann geändert werden, aber die Grundidee ist da