ytree.visualization.tree_plot.TreePlot

class ytree.visualization.tree_plot.TreePlot(tree, dot_kwargs=None, node_function=None, edge_function=None)[source]

Make a simple merger tree plot using pydot and graphviz.

Parameters:
  • tree (merger tree node TreeNode) – The merger tree to be plotted.
  • dot_kwargs (optional, dict) – A dictionary of keyword arguments to be passed to pydot.Dot. Default: None.
  • node_function (optional, function) – A function accepting a single argument of a TreeNode and returning a dictionary of keywords to be given to pydot for creating the node object on the plot. This can be used to customize the appearance of the nodes. See examples below. Default: None.
  • edge_function (optional, function) – A function accepting two TreeNode objects and returning a dictionary of keywords to be given to pydot for creating the edge object on the plot (the lines connecting halos). This can be used to customize the appearance of the edges. See examples below. Default: None.
size_field

The field to determine the size of each circle. Default: ‘mass’.

Type:str
size_log

Whether to scale circle sizes based on log of size field. Default: True.

Type:bool
min_mass

The minimum halo mass to be included in the plot. If given as a float, units are assumed to be Msun. Default: None.

Type:float or unyt_quantity
min_mass_ratio

The minimum ratio between a halo’s mass and the mass of the main halo to be included in the plot. Default: None.

Type:float

Examples

>>> import ytree
>>> a = ytree.load("tree_0_0_0.dat")
>>> p = ytree.TreePlot(a[0])
>>> p.min_mass = 1e6 # Msun
>>> p.save()
>>> # customizing nodes
>>> import ytree
>>> def my_node(halo):
...     label = f"{halo['uid']}"
...     my_kwargs = {"label": label, "fontsize": 8, "shape": "square"}
...     return my_kwargs
>>> a = ytree.load("tree_0_0_0.dat")
>>> p = ytree.TreePlot(a[0], node_function=my_node)
>>> p.save()
>>> # customizing edges
>>> import ytree
>>> def my_edge(ancestor, descendent):
...     if descendent['mass'] < ancestor['mass']:
...         color = 'blue'
...     else:
...         color = 'black'
...     my_kwargs = {"color": color, "penwidth": 5}
...     return my_kwargs
>>> a = ytree.load("tree_0_0_0.dat")
>>> p = ytree.TreePlot(a[0], edge_function=my_edge)
>>> p.save()
__init__(tree, dot_kwargs=None, node_function=None, edge_function=None)[source]

Initialize a TreePlot.

Methods

__init__(tree[, dot_kwargs, node_function, …]) Initialize a TreePlot.
save([filename]) Save the merger tree plot.

Attributes

min_mass The minimum halo mass to be included in the plot.
min_mass_ratio The minimum halo mass to main halo mass.
size_field The field to determine the size of each circle.
size_log Whether to scale circle sizes based on log of size field.