Я пытаюсь сделать вложенную диаграмму в форме пончика в tikz для процента различных типов клеток, использованных в недавних исследованиях с системами MEA. Внешний слой делится на два: не нейрональные и нейрональные исследования. И мой внутренний слой разделен на количество исследований, которые включают нейрональные и ненейронные клетки. У меня есть следующие вопросы:
- Можно ли выровнять внутренний круг с процентным содержанием нейрональных клеток с «нейрональной» частью внешней клетки (и наоборот). Может быть, если бы была возможность повернуть внутренний круг, это было бы легко выровнять.
- Как сделать так, чтобы линии, отходящие от внутреннего круга, начинались с каждой соответствующей черной точки (как это сделано в внешний круг)?
И наконец, если у вас есть какие-либо другие предложения относительно эстетики моей таблицы, не стесняйтесь вносить свой вклад! Мой код (ниже) является ответвлением от этого комментария здесь .
Спасибо за ваше время.
\documentclass{scrartcl}
\usepackage{tikz}
\usetikzlibrary{fadings}
% POR AS PERCENTAGENS COMO NO LATEX DA QUESTAO !
\pgfkeys{%
/piechartthreed/.cd,
scale/.code = {\def\piechartthreedscale{#1}},
mix color/.code = {\def\piechartthreedmixcolor{#1}},
background color/.code = {\def\piechartthreedbackcolor{#1}},
name/.code = {\def\piechartthreedname{#1}}}
\newcommand\piechartthreed\[2\]\[\]{%
\pgfkeys{/piechartthreed/.cd,
scale = 1,
mix color = gray,
background color = white,
name = pc}
\pgfqkeys{/piechartthreed}{#1}
\begin{scope}\[scale=\piechartthreedscale\]
\begin{scope}\[xscale=5,yscale=3\]
\path\[preaction={fill=black,opacity=.8,
path fading=circle with fuzzy edge 20 percent,
transform canvas={yshift=-15mm*\piechartthreedscale}}\] (0,0) circle (1cm);
\fill\[gray\](0,0) circle (0.5cm);
\path\[preaction={fill=\piechartthreedbackcolor,opacity=.8,
path fading=circle with fuzzy edge 20 percent,
transform canvas={yshift=-10mm*\piechartthreedscale}}\] (0,0) circle (0.5cm);
\pgfmathsetmacro\totan{0}
\global\let\totan\totan
\pgfmathsetmacro\bottoman{180} \global\let\bottoman\bottoman
\pgfmathsetmacro\toptoman{0} \global\let\toptoman\toptoman
\begin{scope}\[draw=black,thin\]
\foreach \an/\col \[count=\xi\] in {#2}{%
\def\space{ }
\coordinate (\piechartthreedname\space\xi) at (\totan+\an/2:0.75cm);
\ifdim 180pt>\totan pt
\ifdim 0pt=\toptoman pt
\shadedraw\[left color=\col!20!\piechartthreedmixcolor,
right color=\col!5!\piechartthreedmixcolor,
draw=black,very thin\] (0:.5cm) -- ++(0,-3mm) arc (0:\totan+\an:.5cm)
-- ++(0,3mm) arc (\totan+\an:0:.5cm);
\pgfmathsetmacro\toptoman{180}
\global\let\toptoman\toptoman
\else
\shadedraw\[left color=\col!20!\piechartthreedmixcolor,
right color=\col!5!\piechartthreedmixcolor,
draw=black,very thin\](\totan:.5cm)-- ++(0,-3mm) arc(\totan:\totan+\an:.5cm)
-- ++(0,3mm) arc(\totan+\an:\totan:.5cm);
\fi
\fi
\fill\[\col!20!gray,draw=black\] (\totan:0.5cm)--(\totan:1cm) arc(\totan:\totan+\an:1cm)
--(\totan+\an:0.5cm) arc(\totan+\an:\totan :0.5cm);
\pgfmathsetmacro\finan{\totan+\an}
\ifdim 180pt<\finan pt
\ifdim 180pt=\bottoman pt5
\shadedraw\[left color=\col!20!\piechartthreedmixcolor,
right color=\col!5!\piechartthreedmixcolor,
draw=black,very thin\] (180:1cm) -- ++(0,-3mm) arc (180:\totan+\an:1cm)
-- ++(0,3mm) arc (\totan+\an:180:1cm);
\pgfmathsetmacro\bottoman{0}
\global\let\bottoman\bottoman
\else
\shadedraw\[left color=\col!20!\piechartthreedmixcolor,
right color=\col!5!\piechartthreedmixcolor,
draw=black,very thin\](\totan:1cm)-- ++(0,-3mm) arc(\totan:\totan+\an:1cm)
-- ++(0,3mm) arc(\totan+\an:\totan:1cm);
\fi
\fi
\pgfmathsetmacro\totan{\totan+\an} \global\let\totan\totan
}
\end{scope}
\draw\[thin,black\](0,0) circle (0.5cm);
\end{scope}
\end{scope}
}
\newcommand{\innerchartthreed}\[1\]{
% Calculate total
\pgfmathsetmacro{\totalnum}{0}
\foreach \value/\colour/\name in {#1} {
\pgfmathparse{\value+\totalnum}
\global\let\totalnum=\pgfmathresult
}
\pgfmathsetmacro{\wheelwidth}{\outerradius-\innerradius}
\pgfmathsetmacro{\midradius}{(\outerradius+\innerradius)/2}
\begin{scope}\[rotate=90,xscale=0.6,yscale=1\]
\pgfmathsetmacro{\cumnum}{0}
\foreach \[count=\n\] \value/\colour/\name in {#1} {
\pgfmathsetmacro{\newcumnum}{\cumnum + \value/\totalnum*360}
\pgfmathsetmacro{\midangle}{-(\cumnum+\newcumnum)/2}
\filldraw\[draw=black,fill=\colour\] (-\cumnum:\outerradius) arc (-\cumnum:-(\newcumnum):\outerradius) --
(-\newcumnum:\innerradius) arc (-\newcumnum:-(\cumnum):\innerradius) -- cycle;
\fill\[transparent\] circle (\innerradius);
\draw node \[text=white, font=\bfseries\] (inner \n) at (\midangle:{\innerradius+\wheelwidth/2}) {\name};
\global\let\cumnum=\newcumnum
}
\end{scope}
}
\begin{document}
\begin{tikzpicture}
%\fill (1.8,-2.1) circle (.5mm);
\end{tikzpicture}
\definecolor{ao(english)}{rgb}{0.0, 0.5, 0.0}
\definecolor{azure(colorwheel)}{rgb}{0.0, 0.5, 1.0}
\definecolor{cardinal}{rgb}{0.77, 0.12, 0.23}
\definecolor{caribbeangreen}{rgb}{0.0, 0.8, 0.6}
\definecolor{carolinablue}{rgb}{0.6, 0.73, 0.89}
\begin{tikzpicture}
%\fill (0,0) circle (.5mm);
\piechartthreed\[scale=0.8,
background color=orange!50,
mix color=darkgray\]
{261/red,99/green}
\foreach \i in {1,...,2} { \fill (pc \i) circle (.8mm);}
\draw\[darkgray\] (pc 1) -- ++(-2.95,0.5) coordinate (s1) node\[anchor=south east\] {\Large{\textbf{Non-neuronal}}}
node\[anchor=north east\] {\Large{72.3\%}};
\draw\[darkgray\] (pc 2) -- (5.5,-2) coordinate(s2) node\[anchor=south west\] {\Large{\textbf{Neuronal}}}
node\[anchor=north west\] {\Large{45.5\%}};
%
%\draw\[darkgray\] (pc 3) -- ++(3,-1) coordinate (s3) node\[anchor=south west\] {Sector 3}
%% node\[anchor=north west\] {14\%};
%%
%\draw\[darkgray\] (pc 4) -- ++(3,0) coordinate (s4) node\[anchor=south west\] {Sector 4}
%% node\[anchor=north west\] {25\%};
%%
%\draw\[darkgray\] (pc 2) -- ++(3,-2) coordinate (s2) -- (s2 -| s4) node\[anchor=south west\] {Sector 5} node\[anchor=north west\] {17\%};
\def\innerradius{0.7cm}
\def\outerradius{1.75cm}
\pgfmathsetlengthmacro{\centerradius}{(\outerradius + \innerradius)/2}
\pgfmathsetlengthmacro{\donutcenter}{\innerradius/2}
% Clock-wise order, with cardiomyocyte:
%Non-neuronal (cardinal): cardiomyocite, fibroblast, hek-293, sh-sy5y,rbl-1
%Neuronal (green): cortex, hippocampus, ventricular, drg
\innerchartthreed{95/cardinal!95/,38/cardinal!60/,38/cardinal!50/,38/cardinal!40/,19/cardinal!40/,56/green!90/,38/green!70/,19/green!50/,19/green!50/}
\fill (inner 1) circle (.5mm);
\draw\[darkgray\] (inner 1.center) -- (4.2,1) node\[anchor=south west\] {Cardiomyocyte};
\fill (inner 2) circle (.5mm);
\draw\[darkgray\] (inner 2.center) -- (4.5,-.5) node\[anchor=west\] {Fibroblast};
\fill (inner 3) circle (.5mm);
\draw\[darkgray\] (inner 3.center) -- (3.5,-3) node\[anchor=west\] {HEK-293};
\fill (inner 4) circle (.5mm);
\draw\[darkgray\] (inner 4.center) -- (2,-3.9) node\[anchor=north\] {SH-SY5Y};
\fill (inner 4) circle (.5mm);
\draw\[darkgray\] (inner 4.center) -- (2,-3.9) node\[anchor=north\] {SH-SY5Y};
\fill (inner 5) circle (.5mm);
\draw\[darkgray\] (inner 5.center) -- (-1,-4.2) node\[anchor=north\] {RBL-1};
\fill (inner 6) circle (.5mm);
\draw\[darkgray\] (inner 6.center) -- (-3.5,-3.9) node\[anchor=north\] {Cortex};
\fill (inner 7) circle (.5mm);
\draw\[darkgray\] (inner 7.center) -- (-6.5,-0.6) node\[anchor=north\] {Hippocampus};
\fill (inner 8) circle (.5mm);
\draw\[darkgray\] (inner 8.center) -- (-1.85,3.2) node\[anchor=south east\] {Ventricular};
\fill (inner 9) circle (.5mm);
\draw\[darkgray\] (inner 9.center) -- (0,3.2) node\[anchor=south west\] {DRG};
\end{tikzpicture}
\end{document}
РЕДАКТИРОВАТЬ: Добавлен вывод компиляции (см. ниже)
Вот как выглядит скомпилированный файл .pdf с кодом, который я предоставляю
EDIT2: Ответ будет здесь , если кто-то найдет этот вопрос уместен.