Skip to content

netechos.plot

Methods for plotting network model information.

NetworkPlot(model, theme='ticks')

Object with basic plotting methods for model properties.

Parameters:

Name Type Description Default
model NetworkModel

An instance of a nim.core.NetworkModel object.

required
theme str {'ticks', 'whitegrid'}

Name of a Seaborn theme style. Used to set plot styling.

'ticks'

Returns:

Name Type Description
Self Self @ NetworkPlot

An instance of the NetworkPlot object.

Source code in src/netechos/plot.py
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
def __init__(
    self: Self,
    model: NetworkModel,
    theme: Literal["ticks", "whitegrid", "darkgrid"] = "ticks",
) -> Self:
    """Object to hold plots and plotting methods.

    Parameters
    ----------
    model : NetworkModel
        An instance of a nim.core.NetworkModel object.
    theme : str {'ticks', 'whitegrid'}, optional, default: 'ticks'
        Name of a Seaborn theme style. Used to set plot styling.

    Returns
    -------
    Self : Self@NetworkPlot
        An instance of the NetworkPlot object.

    """
    self.summary_table = model.summary_table
    self.attitude_tracker = model.attitude_tracker
    sns.set_theme(context="notebook", style=theme)

attitude_and_connection_means(fig_width=7, fig_height=3)

Plot mean attitude over time.

Parameters:

Name Type Description Default
fig_width float

Figure width, in inches.

7
fig_height float

Figure height, in inches.

3

Returns:

Name Type Description
Self Self @ NetworkPlot

An instance of the NetworkPlot object.

Source code in src/netechos/plot.py
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
def attitude_and_connection_means(
    self: Self,
    fig_width: float = 7,
    fig_height: float = 3,
) -> Self:
    """Plot mean attitude over time.

    Parameters
    ----------
    fig_width : float, optional, default: 7
        Figure width, in inches.
    fig_height : float, optional, default: 3
        Figure height, in inches.

    Returns
    -------
    Self : Self@NetworkPlot
        An instance of the NetworkPlot object.

    """
    tmax = self.summary_table["time"].max()
    fig, (ax0, ax1) = plt.subplots(1, 2, figsize=(fig_width, fig_height))
    ax0.hlines(y=0, xmin=0, xmax=tmax, color="#444444")
    sns.lineplot(
        data=self.summary_table,
        x="time",
        y="attitude_mean",
        ax=ax0,
    )
    sns.lineplot(
        data=self.summary_table,
        x="time",
        y="connection_mean",
        ax=ax1,
    )
    ax0.set_xscale("log")
    ax1.set_xscale("log")
    sns.despine(ax=ax0)
    sns.despine(ax=ax1)
    fig.tight_layout()
    self.means_over_time = fig
    return self

node_attitudes_over_time(fig_width=5, fig_height=3)

Plot individual node attitudes over time.

Parameters:

Name Type Description Default
fig_width float

Figure width, in inches.

7
fig_height float

Figure height, in inches.

3

Returns:

Name Type Description
Self Self @ NetworkPlot

An instance of the NetworkPlot object.

Source code in src/netechos/plot.py
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
def node_attitudes_over_time(
    self: Self,
    fig_width: float = 5,
    fig_height: float = 3,
) -> Self:
    """Plot individual node attitudes over time.

    Parameters
    ----------
    fig_width : float, optional, default: 7
        Figure width, in inches.
    fig_height : float, optional, default: 3
        Figure height, in inches.

    Returns
    -------
    Self : Self@NetworkPlot
        An instance of the NetworkPlot object.

    """
    tmax = self.attitude_tracker["time"].max()
    self.attitude_tracker = self.attitude_tracker.with_columns(
        attitude_sin=pl.col("attitude").sin(),
    )
    fig, ax = plt.subplots(figsize=(fig_width, fig_height))
    ax.hlines(y=0, xmin=0, xmax=tmax, color="#444444")
    sns.lineplot(
        data=self.attitude_tracker,
        x="time",
        y="attitude_sin",
        hue="node",
        ax=ax,
    )
    sns.despine(ax=ax)
    sns.move_legend(ax, loc="upper left", bbox_to_anchor=(1, 1))
    fig.tight_layout()
    self.means_over_time = fig
    return self