In [17]:
import daft
import matplotlib.pyplot as pl
%matplotlib inline
In [96]:
pgm = daft.PGM(shape=(6,8), node_unit=1, )
# TODO: boldify vectors
###################################################################
# Add nodes
#
# progenitor
pgm.add_node(daft.Node("x_p", r"$x_p$", 3, 6))
pgm.add_node(daft.Node("w_p", r"$w_p$", 2, 6))
pgm.add_node(daft.Node("D_p", r"$D_p$", 1, 6, observed=True))
pgm.add_node(daft.Node("cov_p", r"$\Sigma_p$", 1, 7, observed=True))
pgm.add_node(daft.Node("m_0", r"$m_0$", 1, 5, observed=True))
pgm.add_node(daft.Node("mdot", r"$\dot{m}$", 1, 4))
# potential
pgm.add_node(daft.Node("Phi", r"$\Phi$", 3, 7))
# other
pgm.add_node(daft.Node("t_int", r"$t_{\rm int}$", 4, 7))
pgm.add_node(daft.Node("lambda", r"$\lambda$", 5, 6))
# star plate
pgm.add_plate(daft.Plate([2,1,3,4], label="$n=1...N$"))
# stars
pgm.add_node(daft.Node("x_n", r"$x_n$", 3, 4))
pgm.add_node(daft.Node("t_n", r"$\tau_n$", 4, 4))
pgm.add_node(daft.Node("w_n", r"$w_n$", 3, 3))
pgm.add_node(daft.Node("D_n", r"$D_n$", 3, 2, observed=True))
pgm.add_node(daft.Node("cov_n", r"$\Sigma$", 4, 2, observed=True))
###################################################################
# Add edges
#
# progenitor
pgm.add_edge('Phi', 'x_p')
pgm.add_edge('t_int', 'x_p')
pgm.add_edge('x_p', 'w_p')
pgm.add_edge('w_p', 'D_p')
pgm.add_edge('cov_p', 'D_p')
# stars
pgm.add_edge('lambda', 'x_n')
pgm.add_edge('x_p', 'x_n')
pgm.add_edge('m_0', 'x_n')
pgm.add_edge('mdot', 'x_n')
pgm.add_edge('m_0', 'mdot')
pgm.add_edge('t_n', 'x_n')
pgm.add_edge('x_n', 'w_n')
pgm.add_edge('w_n', 'D_n')
pgm.add_edge('cov_n', 'D_n')
ax = pgm.render()
fig = ax.figure
fig.savefig("pgm.pdf")
In [ ]: