Я использовал этот замечательный код круговой диаграммы:Как нарисовать столбчатую и круговую диаграммуКод взят изБордайгорл.
Мне было интересно, может ли кто-нибудь понять, как можно иметь две круговые диаграммы в одной среде с разными размерами.
Часть кода, которая отвечает за это, — «масштаб» при вызове функции круговой диаграммы:
\begin{tikzpicture}
[
pie chart,
slice type={g}{giallo},
slice type={A}{rosso},
slice type={B}{blu},
pie values/.style={font={\small}},
scale=2
]
\pie{t=1, A in power}{66/g,34/A}
\pie[xshift=2.2cm]%
{t=2, B in power}{33/g,33/B}
\end{tikzpicture}
У меня такой вопрос: кто-нибудь знает, как создать два «типа» пирогов, например, один с scale=2
, а другой с ?scale=2.5
Для понимания я опубликую MWE на основе всего кода, созданногоБордайгорлздесь. Я бы хотел, чтобы левая круговая диаграмма была в одном масштабе, а круговая диаграмма справа — в другом масштабе.Обратите внимание, что я не являюсь автором этого кода, и следует отдать должноеБордайгорл:
\documentclass[border=10pt,multi,tikz]{standalone}
\definecolor{rosso}{RGB}{220,57,18}
\definecolor{giallo}{RGB}{255,153,0}
\definecolor{blu}{RGB}{102,140,217}
\definecolor{verde}{RGB}{16,150,24}
\definecolor{viola}{RGB}{153,0,153}
\makeatletter
\tikzstyle{chart}=[
legend label/.style={font={\scriptsize},anchor=west,align=left},
legend box/.style={rectangle, draw, minimum size=5pt},
axis/.style={black,semithick,->},
axis label/.style={anchor=east,font={\tiny}},
]
\tikzstyle{bar chart}=[
chart,
bar width/.code={
\pgfmathparse{##1/2}
\global\let\bar@w\pgfmathresult
},
bar/.style={very thick, draw=white},
bar label/.style={font={\bf\small},anchor=north},
bar value/.style={font={\footnotesize}},
bar width=.75,
]
\tikzstyle{pie chart}=[
chart,
slice/.style={line cap=round, line join=round, very thick,draw=white},
pie title/.style={font={\bf}},
slice type/.style 2 args={
##1/.style={fill=##2},
values of ##1/.style={}
}
]
\pgfdeclarelayer{background}
\pgfdeclarelayer{foreground}
\pgfsetlayers{background,main,foreground}
\newcommand{\pie}[3][]{
\begin{scope}[#1]
\pgfmathsetmacro{\curA}{90}
\pgfmathsetmacro{\r}{1}
\def\c{(0,0)}
\node[pie title] at (90:1.3) {#2};
\foreach \v/\s in{#3}{
\pgfmathsetmacro{\deltaA}{\v/100*360}
\pgfmathsetmacro{\nextA}{\curA + \deltaA}
\pgfmathsetmacro{\midA}{(\curA+\nextA)/2}
\path[slice,\s] \c
-- +(\curA:\r)
arc (\curA:\nextA:\r)
-- cycle;
\pgfmathsetmacro{\d}{max((\deltaA * -(.5/50) + 1) , .5)}
\begin{pgfonlayer}{foreground}
\path \c -- node[pos=\d,pie values,values of \s]{$\v\%$} +(\midA:\r);
\end{pgfonlayer}
\global\let\curA\nextA
}
\end{scope}
}
\newcommand{\legend}[2][]{
\begin{scope}[#1]
\path
\foreach \n/\s in {#2}
{
++(0,-10pt) node[\s,legend box] {} +(5pt,0) node[legend label] {\n}
}
;
\end{scope}
}
\begin{document}
\begin{tikzpicture}
[
pie chart,
slice type={g}{giallo},
slice type={A}{rosso},
slice type={B}{blu},
pie values/.style={font={\small}},
scale=2
]
\pie{1}{66/g,34/A}
\pie[xshift=2.2cm]%
{2}{33.3/g,33.3/B,33.3/A}
\end{tikzpicture}
\end{document}
Прошу прощения, если это очевидный вопрос. Я пробовал двумя способами, и все они не увенчались успехом:
- Я попытался удалить масштаб из преамбулы в tikz и добавил scale=2 при вызове функции pie:
\pie[xshift=2.2cm, scale=2]{2}{33.3/g,33.3/B,33.3/A}
- Я также попытался создать две функции в преамбуле документа, одну pie1 и другую pie2. Код не компилируется
Спасибо!
решение1
Используйте scope
среду, т.е.
\begin{scope}[scale=2,xshift=2.2cm]
\pie{2}{33.3/g,33.3/B,33.3/A}
\end{scope}
\documentclass[border=10pt,multi,tikz]{standalone}
\definecolor{rosso}{RGB}{220,57,18}
\definecolor{giallo}{RGB}{255,153,0}
\definecolor{blu}{RGB}{102,140,217}
\definecolor{verde}{RGB}{16,150,24}
\definecolor{viola}{RGB}{153,0,153}
\makeatletter
\tikzstyle{chart}=[
legend label/.style={font={\scriptsize},anchor=west,align=left},
legend box/.style={rectangle, draw, minimum size=5pt},
axis/.style={black,semithick,->},
axis label/.style={anchor=east,font={\tiny}},
]
\tikzstyle{bar chart}=[
chart,
bar width/.code={
\pgfmathparse{##1/2}
\global\let\bar@w\pgfmathresult
},
bar/.style={very thick, draw=white},
bar label/.style={font={\bf\small},anchor=north},
bar value/.style={font={\footnotesize}},
bar width=.75,
]
\tikzstyle{pie chart}=[
chart,
slice/.style={line cap=round, line join=round, very thick,draw=white},
pie title/.style={font={\bf}},
slice type/.style 2 args={
##1/.style={fill=##2},
values of ##1/.style={}
}
]
\pgfdeclarelayer{background}
\pgfdeclarelayer{foreground}
\pgfsetlayers{background,main,foreground}
\newcommand{\pie}[3][]{
\begin{scope}[#1]
\pgfmathsetmacro{\curA}{90}
\pgfmathsetmacro{\r}{1}
\def\c{(0,0)}
\node[pie title] at (90:1.3) {#2};
\foreach \v/\s in{#3}{
\pgfmathsetmacro{\deltaA}{\v/100*360}
\pgfmathsetmacro{\nextA}{\curA + \deltaA}
\pgfmathsetmacro{\midA}{(\curA+\nextA)/2}
\path[slice,\s] \c
-- +(\curA:\r)
arc (\curA:\nextA:\r)
-- cycle;
\pgfmathsetmacro{\d}{max((\deltaA * -(.5/50) + 1) , .5)}
\begin{pgfonlayer}{foreground}
\path \c -- node[pos=\d,pie values,values of \s]{$\v\%$} +(\midA:\r);
\end{pgfonlayer}
\global\let\curA\nextA
}
\end{scope}
}
\newcommand{\legend}[2][]{
\begin{scope}[#1]
\path
\foreach \n/\s in {#2}
{
++(0,-10pt) node[\s,legend box] {} +(5pt,0) node[legend label] {\n}
}
;
\end{scope}
}
\begin{document}
\begin{tikzpicture}
[
pie chart,
slice type={g}{giallo},
slice type={A}{rosso},
slice type={B}{blu},
pie values/.style={font={\small}},
% scale=2
]
\pie{1}{66/g,34/A}
\begin{scope}[scale=2,xshift=2.2cm]
\pie{2}{33.3/g,33.3/B,33.3/A}
\end{scope}
\end{tikzpicture}
\end{document}