I'm making a tree of nodes, but i would like the nodes to be filled with different shapes, and I'm wondering if that's possible?
Right now my tree looks like this
But I would want to have each node like this
Where the sizes of the yellow, red and green fields are decided by the size of the loss.
The code that I currently have is this for the tree:
\documentclass{article}
\usepackage[utf8]{inputenc}
\usepackage{tikz}
\title{Tree, loss}
\date{October 2020}
\usepackage{natbib}
\usepackage{graphicx}
\begin{document}
\maketitle
\tikzstyle{treenode0} = [circle, draw=black, fill=yellow!20, align=center]
\tikzstyle{treenode1} = [circle, draw=black, fill=red!20, align=center]
\tikzstyle{treenode2} = [circle, draw=black, fill=green!10, align=center]
\scalebox{0.75}{
\begin{tikzpicture}[node distance=2.2cm]
%n=4, alpha=0.02
%checking how it will be with more nodes
\node[treenode2] (node0) {Loss0: 0.500 \ Loss1: 0.500 \ Loss2: 0.045} ;
\node[treenode2, below of=node0, left of = node0] (node1a) {Loss0: 0.125 \ Loss1: 0.875 \ Loss2: 0.025};
\node[treenode2, below of=node0, right of = node0] (node1b) {Loss0: 0.875 \ Loss1: 0.125 \ Loss2: 0.025};
\draw[->] (node0) -- (node1a);
\draw[->] (node0) -- (node1b);
\node[treenode0, below of=node1a, left of = node1a] (node2a) {Loss0: 0.875 \ Loss1: 0.125 \ Loss2: 0.025};
\node[treenode2, below of=node1a, right of = node1a] (node2b) {Loss0: 0.500 \ Loss1: 0.500 \ Loss2: 0.020};
\node[treenode1, below of=node1b, right of = node1b] (node2c) {Loss0: 1.000 \ Loss1: 0.000 \ Loss2: 0.020};
\draw[->] (node1a) -- (node2a);
\draw[->] (node1a) -- (node2b);
\draw[->] (node1b) -- (node2b);
\draw[->] (node1b) -- (node2c);
\node[treenode0, below of=node2a, left of=node2a] (node3a) {Loss0: 0.000 \ Loss1: 1.000 \ Loss2: 0.020};
\node[treenode0, below of=node2a, right of=node2a] (node3b) {Loss0: 0.000 \ Loss1: 1.000 \ Loss2: 0.020};
\node[treenode1, below of=node2b, right of=node2b] (node3c) {Loss0: 1.000 \ Loss1: 0.000 \ Loss2: 0.020};
\node[treenode1, below of=node2c, right of=node2c] (node3d) {Loss0: 1.000 \ Loss1: 0.000 \ Loss2: 0.020};
\draw[->] (node2a) -- (node3a);
\draw[->] (node2a) -- (node3b);
\draw[->] (node2b) -- (node3b);
\draw[->] (node2b) -- (node3c);
\draw[->] (node2c) -- (node3c);
\draw[->] (node2c) -- (node3d);
\node[treenode0, below of=node1a, left of = node3a] (node4a) {Loss0: 0.875 \ Loss1: 0.125 \ Loss2: 0.025};
%\node[treenode2, below of=node1a, right of = node1a] (node4b) {Loss0: 0.500 \ Loss1: 0.500 \ Loss2: 0.020};
\node[treenode1, below of=node3d, right of = node3d] (node4c) {Loss0: 1.000 \ Loss1: 0.000 \ Loss2: 0.020};
\end{tikzpicture}
}
\end{document}
And the code for the node is this:
\begin{tikzpicture}
[node0/.pic={
\fill[fill=green!20] (0,0) -- (3cm,0cm) arc [start angle=0, end angle=30, radius=3cm] -- cycle;
\fill[fill=red!20] (0,0) -- (2.598cm,1.5cm) arc [start angle=30, end angle=200, radius=3cm] -- cycle;
\fill[fill=yellow!30] (0,0) -- (-2.814cm,-1.026cm) arc [start angle=200, end angle = 360, radius=3cm] -- cycle;
\draw[color=green] (0,0) circle (3cm);
}]
\draw (0,0) pic (3,3) {node0};
\end{tikzpicture}
My tree is going to be a lot bigger than this, and it is dependent on values in a matrix that I've found in Python. I'm also making a lot of different trees from different matrices, so i hoped to find a general solution to this and be able to plug in the numbers from my python matrix. Therefore I'm thinking it is so much easier to use nodes so that I can place them realtive of each other (like use the left of and below of etc).
Does anyone know if it is possible to make nodes like this? If not, do you have any other solutions?



