Draw Life Wheel
It is a very interesting challenge, here a puzzle to make the first graph, I created a function called \lifeweel
, the first parameter indicates the levels, the second the grid, the third indicates the quantity of features, the fourth parameter is a construction with the names of each character with the specific value.
UPDATE: Using scope to allow draw more than one graph, create a second smart objet code, called \lifeweelS
means that you can convert \lifeweel
objet adding "S" this creates another type of lifeweel. Opcodes \lifeweel{levels}{grid}{number of features}{feature_name/quantity}[anchor angle][numbers direction in degrees][relative position](ID);
RESULT:
MWE?:
% arara: pdflatex: {synctex: yes, action: nonstopmode}
% By J. Leon V. Share as Beerware philosophy
\documentclass[border=20pt]{standalone}
\usepackage{xcolor}
\usepackage{tikz}
\usepackage{pgfmath}
\usepackage{xifthen}
\usetikzlibrary{decorations.text, arrows.meta,calc,shadows.blur,shadings}
\renewcommand*\familydefault{\sfdefault} % Set font to serif family
\begin{document}
\begin{tikzpicture}[
% Environment Cfg
font=\Large,
scale=1,
% Styles
Grid/.style={
loosely dotted,
line width=1.5pt,
color=black
},
Separator/.style={
thick,
color=black!50
},
Border/.style={
line width=1pt,
color=red!60
},
Border2/.style={
line width=2pt,
color=red!60
},
Fill/.style={
fill=black,
opacity=0.1
}
]
% lifeweel from many codes arround TEX.SE
%Variables: 1:levels, 2:grid 3:number of features 4: Feature_name/quantity
% 5: anchor aling 6: numbers position 7:Relative position 8:ID
\def\lifeweel#1#2#3#4[#5][#6](#7)(#8){%
\begin{scope}[shift={(#7)}]
%Decoration
\foreach \n in {0,#2,...,#1}{
\draw[fill=black, opacity=0.1] (0,0) circle [radius=\n];}
%Drawing the grid and numbers.
\foreach \n in {0,#2,...,#1}{
\draw[Grid] (0,0) circle [radius=\n];
\node[anchor=#5] (A) at (#6:\n+0.2){\n};}
%Drawing features separations.
\foreach \m [count=\i] in {0,1,...,#3}{
\draw[Separator] (0,0) -- (360/#3*\i: #1);}
%Drawing the border
\draw[Border] (0,0) circle [radius=#1];
%Drawing the names
\foreach \o/\p [count=\j] in {#4}{
\pgfmathparse{int(360/#3*\j)}
\ifthenelse{ \pgfmathresult >180}
{% True
\path[%Reverse
decoration={
raise = -0.8ex,
text along path,
text = {|\huge|\o},
text align = center,
reverse path
},
decorate
]
(360/#3*\j:#1+0.7) arc (360/#3*\j:360/#3*(\j-1):#1+0.7);%\path
}
{%False
\path[%Normal
decoration={
raise = -0.8ex,
text along path,
text = {|\huge|\o},
text align = center
},
decorate
]
(360/#3*\j:#1+0.7) arc (360/#3*\j:360/#3*(\j-1):#1+0.7); %Path
}
\draw[Border2]
(360/#3*\j:\p) coordinate (#8a\j)
arc (360/#3*\j:360/#3*(\j-1):\p) coordinate (#8b\j);
\draw[fill=red, opacity=0.2]
(0,0) -- (360/#3*\j:\p) arc (360/#3*\j:360/#3*(\j-1):\p);
}
\pgfmathparse{int(#3+1)} % Principle of uroboro
\coordinate (#8b\pgfmathresult) at (#8b1);
\foreach \o/\p [count=\i, evaluate=\i as \x using int(\i+1)] in {#4}{%Close the perimete
\draw[Border2] (#8a\i) -- (#8b\x);}
\end{scope}
}
%Variables: 1:levels, 2:grid 3:number of features 4: Feature_name/quantity
% 5: anchor aling 6: numbers position 7:Relative position 8: ID
\def\lifeweelS#1#2#3#4[#5][#6](#7)(#8){%
\begin{scope}[shift={(#7)}]
%Drawing the numbers.
\foreach \n [count=\m] in {0,#2,...,#1}{
\node[anchor=#5] (A) at (#6:\n+0.2){\n};
}
%Drawing the grid
\foreach \n in {0,#2,...,#1}{
\foreach [count=\i, evaluate=\i as \x using int(\i+1)]\m in {0,1,...,#3}{
\draw[Grid](360/#3*\i:\n) -- (360/#3*\x:\n);
\draw[Fill](360/#3*\i:\n) -- (0,0) -- (360/#3*\x:\n);
}
}
%Drawing features separations.
\foreach \m [count=\i] in {0,1,...,#3}{
\draw[Separator] (0,0) -- (360/#3*\i: #1);}
%Drawing the border
\draw[fill=black, opacity=0.1] (0,0) circle [radius=#1];
\draw[Border] (0,0) circle [radius=#1];
%Drawing the names
\foreach \o/\p [count=\j from 0] in {#4}{
\pgfmathparse{int(360/#3*\j)}
\ifthenelse{\pgfmathresult =90 \OR \pgfmathresult =270}
{%True
\draw (360/#3*\j:#1+0.7) node [anchor=center]{\huge\o};
}
{%false
\ifthenelse{\pgfmathresult <90 \OR \pgfmathresult >270}
{% True
\draw (360/#3*\j:#1+0.7) node [anchor=west]{\huge\o};
}
{%False
\draw (360/#3*\j:#1+0.7) node [anchor=east]{\huge\o};
}
}
\coordinate (#8c\j) at (360/#3*\j:\p);
}
\coordinate (#8c#3) at (#8c0);
\foreach \o/\p [count=\i from 0, evaluate=\i as \x using int(\i+1)] in {#4}{%Close the perimete
\draw[Border2] (#8c\i) -- (#8c\x);
\draw[fill=red, opacity=.2] (#8c\i) --(0,0) -- (#8c\x);
}
\end{scope}
}
% This function draws the lifeweel
%\lifeweel{levels}{grid}{number of features}{feature_name/quantity}[anchor angle][numbers direction in degrees][relative position](ID);
\lifeweel{10}{2}{8}{
Money/5,
Entertainment/4,
Romance/7,
Presonal Growth/9,
Friends {\&} Family/3,
Financial/5,
Spiritual/7,
Health/5
}[45][180](0,0)(1);
\lifeweel{10}{1}{5}{
Money/5,
Entertainment/3,
Romance/8,
Presonal Growth/6,
Friends {\&} Family/8
}[-90][0](25,0)(2);
\lifeweelS{10}{2}{8}{
Money/5,
Entertainment/4,
Romance/7,
Presonal Growth/9,
Friends {\&} Family/3,
Financial/5,
Spiritual/7,
Health/5
}[45][180](0,-25)(3);
\lifeweelS{10}{1}{5}{
Money/5,
Entertainment/3,
Romance/8,
Presonal Growth/6,
Friends {\&} Family/8
}[-90][0](25,-25)(4);
\end{tikzpicture}
\end{document}
PSD: The code allows you to reach those extremes, although it is a little dark (not so easy to read), I think you can play with all options, of course reach these extremes is just for fun and create a useful tikz framework.
I have a "minimal damage proposal" as I do not understand why you use landscape
and article
instead of standalone
. And note that dimensionless lengths are interpreted as pt
. I used anchors to put the stuff close to the circle.
\documentclass[12pt]{article}
\usepackage[landscape]{geometry}
\usepackage{tikz}
\definecolor{forestgreen}{RGB}{60,127,50}
\definecolor{mahogany}{RGB}{169,52,72}
\definecolor{insightly}{RGB}{255,74,0}
\definecolor{minbelow}{RGB}{167,116,16}
\def\mybf{.55cm}
\def\radiusf{8cm}
\def\mcf{.55cm}
\begin{document}
\pagestyle{empty}
\begin{tikzpicture}
\draw[red] (0,0) circle (\radiusf);
\node[draw, circle, inner sep=.2mm] (a) at (0,0) {};
\foreach \x [count=\xi] in {360, 315, ..., 45}
{
\draw[thin, gray!40] (a) -- (\x:\radiusf);
}
\foreach \X in {1,...,9} {
\draw[dashed,gray] (0,0) circle ({\radiusf*\X/10});
\node[above left] at (180:{\radiusf*\X/10}){\X};
}
\def\shi{2pt};
\draw (360:\radiusf+\shi) node[anchor=west] {Health};
\draw (315:\radiusf+\shi) node[anchor=north west] {Spritual};
\draw (270:\radiusf+\shi) node[anchor=north] {Career};
\draw (225:\radiusf+\shi) node[anchor=north east] {Financial};
\draw (180:\radiusf+\shi) node[anchor=east] {Friends \& Family};
\draw (135:\radiusf+\shi) node[anchor=south east] {Personal Growth};
\draw (90:\radiusf+\shi) node[anchor=south] {Romance};
\draw (45:\radiusf+\shi) node[anchor=south west] {Entertainment};
\def\angle{360/8};
\draw[mahogany,thick]
\foreach \X [count=\Y] in {1,2,1,3,2,1,2,3}
{\ifnum\Y>1
--
\else
\pgfextra{\xdef\Xstart{\X}}
\fi
({\angle*\Y}:{\radiusf*\X/10}) arc({\angle*\Y}:{\angle*(\Y+1)}:{\radiusf*\X/10})
}
--(\angle:{\radiusf*\Xstart/10});
\end{tikzpicture}
\end{document}
Update: added numbers and simplified the mahagony curve.