Exemple #1
0
def plot_fragments(nl, splits, neuron_class=None, scale=8):
    n_col = len(nl)
    fig = plt.figure(figsize=(scale * n_col,
                              scale))  # constrained_layout=True)
    for i, n in enumerate(nl):
        ax = fig.add_subplot(1, n_col, i + 1, projection="3d")
        skid = int(n.skeleton_id)
        if skid in splits.index:
            split_nodes = splits[skid]
            split_locs = pymaid.get_node_location(split_nodes)
            split_locs = split_locs[["x", "y", "z"]].values
            pymaid.plot2d(split_locs,
                          ax=ax,
                          scatter_kws=dict(color="orchid", s=30),
                          method="3d")
            # order of output is axon, dendrite
            fragments = pymaid.cut_neuron(n, split_nodes)
        else:
            fragments = [n]
        n_frag = len(fragments)
        for i, f in enumerate(fragments):
            if n_frag == 1:
                color = colors[2]  # unsplitable
            elif i == n_frag - 1:
                color = colors[1]  # dendrite
            else:
                color = colors[0]  # axon
            f.plot2d(ax=ax, color=color, method="3d")
            title = f"{neuron_class}, {n.neuron_name}, {n.skeleton_id}"
            ax.set_title(title, color="grey")
        set_axes_equal(ax)
    plt.tight_layout()
Exemple #2
0
def plot_3view(
    data,
    axs,
    palette=None,
    connectors=False,
    connectors_only=False,
    label_by=None,
    alpha=1,
    s=1,
    row_title=None,
    **kws,
):
    volumes = [pymaid.get_volume(v) for v in volume_names]
    for i, view in enumerate(views):
        ax = axs[i]
        if label_by is None:
            pymaid.plot2d(
                data,
                color=palette,
                ax=ax,
                method="3d",
                connectors=connectors,
                connectors_only=connectors_only,
                **kws,
            )
        else:
            uni_labels = np.unique(data[label_by])
            for ul in uni_labels:
                temp_data = data[data[label_by] == ul]
                color = palette[ul]
                scatter_kws = dict(s=s, alpha=alpha, color=color)
                pymaid.plot2d(
                    temp_data[["x", "y", "z"]],
                    ax=ax,
                    method="3d",
                    connectors=connectors,
                    connectors_only=connectors_only,
                    scatter_kws=scatter_kws,
                    **kws,
                )
        set_view_params(ax, **view_dict[view])
        plot_volumes(volumes, ax)
        if row_title is not None:
            ax = axs[0]
            ax.text2D(
                x=0,
                y=0.5,
                s=row_title,
                ha="right",
                va="center",
                color="grey",
                rotation=90,
                transform=ax.transAxes,
            )
Exemple #3
0
                      figure=fig,
                      wspace=0,
                      hspace=0,
                      height_ratios=[0.8, 0.2])

    skeleton_color_dict = dict(
        zip(meta.index,
            np.vectorize(CLASS_COLOR_DICT.get)(meta["merge_class"])))

    # ax = fig.add_subplot(1, 3, 1, projection="3d")
    ax = fig.add_subplot(gs[0, 0], projection="3d")

    pymaid.plot2d(
        ids,
        color=skeleton_color_dict,
        ax=ax,
        connectors=False,
        method="3d",
        autoscale=True,
    )
    ax.azim = -90  # 0 for side view
    ax.elev = 0
    ax.dist = 6
    set_axes_equal(ax)

    # ax = fig.add_subplot(1, 3, 2, projection="3d")
    ax = fig.add_subplot(gs[0, 1], projection="3d")
    pymaid.plot2d(
        ids,
        color=skeleton_color_dict,
        ax=ax,
        connectors=False,
Exemple #4
0
def plot_neuron_morphology(ids, inputs, outputs, axs, row_label=True):
    # plot neuron skeletons
    row = 0
    for i, view in enumerate(views):
        ax = axs[row, i]
        if show_neurons:
            pymaid.plot2d(ids,
                          color=skeleton_color_dict,
                          ax=ax,
                          connectors=False,
                          method="3d")
        plot_volumes(ax)
        set_view_params(ax, **view_dict[view])

    # plot inputs
    row = 1
    for i, view in enumerate(views):
        ax = axs[row, i]
        for j, ct in enumerate(connection_types):
            ct_inputs = inputs[inputs["postsynaptic_type"] == ct]
            connector_locs = ct_inputs[["x", "y", "z"]].values
            pymaid.plot2d(
                connector_locs,
                ax=ax,
                method="3d",
                scatter_kws=dict(color=connection_colors[ct]),
            )
        plot_volumes(ax)
        set_view_params(ax, **view_dict[view])

    # plot outputs
    row = 2
    for i, view in enumerate(views):
        ax = axs[row, i]
        for j, ct in enumerate(connection_types):
            ct_outputs = outputs[outputs["presynaptic_type"] == ct]
            connector_locs = ct_outputs[["x", "y", "z"]].values
            pymaid.plot2d(
                connector_locs,
                ax=ax,
                method="3d",
                scatter_kws=dict(color=connection_colors[ct],
                                 label=ct,
                                 s=2,
                                 alpha=0.5),
            )
            # if i == 0:
            #     ax.legend(bbox_to_anchor=(0, 1), loc="upper left")
        plot_volumes(ax)
        set_view_params(ax, **view_dict[view])

    if row_label:
        axs[0, 0].text2D(
            x=0,
            y=0.5,
            s="Skeletons",
            ha="right",
            va="center",
            color="grey",
            rotation=90,
            transform=axs[0, 0].transAxes,
        )
        axs[1, 0].text2D(
            x=0,
            y=0.5,
            s="Inputs",
            ha="right",
            va="center",
            color="grey",
            rotation=90,
            transform=axs[1, 0].transAxes,
        )
        axs[2, 0].text2D(
            x=0,
            y=0.5,
            s="Outputs",
            ha="right",
            va="center",
            color="grey",
            rotation=90,
            transform=axs[2, 0].transAxes,
        )
Exemple #5
0
def plot_volumes(ax):
    pymaid.plot2d(volumes, ax=ax, method="3d")
    for c in ax.collections:
        if isinstance(c, Poly3DCollection):
            c.set_alpha(0.03)
Exemple #6
0
def plot_neuron_morphology(ids, inputs, outputs, axs, row_label=True):
    # plot neuron skeletons
    row = 0
    for i, view in enumerate(views):
        ax = axs[row, i]
        if show_neurons:
            pymaid.plot2d(ids,
                          color=skeleton_color_dict,
                          ax=ax,
                          connectors=False,
                          method="3d")
        plot_volumes(ax)
        set_view_params(ax, **view_dict[view])

    # plot inputs
    row = 1
    for i, view in enumerate(views):
        ax = axs[row, i]
        connector_locs = inputs[["x", "y", "z"]].values
        pymaid.plot2d(connector_locs, color="orchid", ax=ax, method="3d")
        plot_volumes(ax)
        set_view_params(ax, **view_dict[view])

    # plot outputs
    row = 2
    for i, view in enumerate(views):
        ax = axs[row, i]
        connector_locs = outputs[["x", "y", "z"]].values
        pymaid.plot2d(connector_locs,
                      color="orchid",
                      ax=ax,
                      method="3d",
                      cn_mesh_colors=True)
        plot_volumes(ax)
        set_view_params(ax, **view_dict[view])

    if row_label:
        axs[0, 0].text2D(
            x=0,
            y=0.5,
            s="Skeletons",
            ha="center",
            va="bottom",
            color="grey",
            rotation=90,
            transform=axs[0, 0].transAxes,
        )
        axs[1, 0].text2D(
            x=0,
            y=0.5,
            s="Inputs",
            ha="center",
            va="bottom",
            color="grey",
            rotation=90,
            transform=axs[1, 0].transAxes,
        )
        axs[2, 0].text2D(
            x=0,
            y=0.5,
            s="Outputs",
            ha="center",
            va="bottom",
            color="grey",
            rotation=90,
            transform=axs[2, 0].transAxes,
        )
Exemple #7
0
    x=0.1,
    y=0.8,
    s="Skeletons",
    ha="center",
    va="bottom",
    color="grey",
    rotation=90,
    transform=fig.transFigure,
)

# plot inputs
row = 1
for i, view in enumerate(views):
    ax = add_subplot(row, i)
    connector_locs = inputs[["x", "y", "z"]].values
    pymaid.plot2d(connector_locs, color="orchid", ax=ax, method="3d")
    plot_volumes(ax)
    set_view_params(ax, **view_dict[view])

axs[1, 0].text2D(
    x=0.1,
    y=0.49,
    s="Inputs",
    ha="center",
    va="bottom",
    color="grey",
    rotation=90,
    transform=fig.transFigure,
)

# plot outputs
Exemple #8
0
    ax=ax,
    norm_bar_width=False,
)

stashfig("lvl2-barplot" + sub_basename)

# %% [markdown]
# ##
import pymaid
from src.pymaid import start_instance


start_instance()

for tp in meta["total_pred"].unique()[:10]:
    ids = list(meta[meta["total_pred"] == tp].index.values)
    ids = [int(i) for i in ids]
    fig, ax = plt.subplots(1, 1, figsize=(10, 10))
    skeleton_color_dict = dict(
        zip(meta.index, np.vectorize(CLASS_COLOR_DICT.get)(meta["merge_class"]))
    )
    pymaid.plot2d(ids, color=skeleton_color_dict, ax=ax)
    ax.axis("equal")
    stashfig(f"test-plot2d-{tp}")

# %% [markdown]
# ##


# %%
Exemple #9
0
def plot_neurons(meta, key=None, label=None, barplot=False):

    if label is not None:
        ids = list(meta[meta[key] == label].index.values)
    else:
        ids = list(meta.index.values)
    ids = [int(i) for i in ids]

    new_ids = []
    for i in ids:
        try:
            pymaid.get_neuron(
                i, raise_missing=True, with_connectors=False, with_tags=False
            )
            new_ids.append(i)
        except:
            print(f"Missing neuron {i}, not plotting it.")

    ids = new_ids
    meta = meta.loc[ids]

    fig = plt.figure(figsize=(30, 10))

    gs = plt.GridSpec(2, 3, figure=fig, wspace=0, hspace=0, height_ratios=[0.8, 0.2])

    skeleton_color_dict = dict(
        zip(meta.index, np.vectorize(CLASS_COLOR_DICT.get)(meta["merge_class"]))
    )

    ax = fig.add_subplot(gs[0, 0], projection="3d")

    pymaid.plot2d(
        ids,
        color=skeleton_color_dict,
        ax=ax,
        connectors=False,
        method="3d",
        autoscale=True,
    )
    ax.azim = -90
    ax.elev = 0
    ax.dist = 5
    set_axes_equal(ax)

    ax = fig.add_subplot(gs[0, 1], projection="3d")
    pymaid.plot2d(
        ids,
        color=skeleton_color_dict,
        ax=ax,
        connectors=False,
        method="3d",
        autoscale=True,
    )
    ax.azim = 0
    ax.elev = 0
    ax.dist = 5
    set_axes_equal(ax)

    ax = fig.add_subplot(gs[0, 2], projection="3d")
    pymaid.plot2d(
        ids,
        color=skeleton_color_dict,
        ax=ax,
        connectors=False,
        method="3d",
        autoscale=True,
    )
    ax.azim = -90
    ax.elev = 90
    ax.dist = 5
    set_axes_equal(ax)

    if barplot:
        ax = fig.add_subplot(gs[1, :])
        temp_meta = meta[meta[key] == label]
        cat = temp_meta[key + "_side"].values
        subcat = temp_meta["merge_class"].values
        stacked_barplot(
            cat,
            subcat,
            ax=ax,
            color_dict=CLASS_COLOR_DICT,
            category_order=np.unique(cat),
        )
        ax.get_legend().remove()

    # fig.suptitle(label)
    return fig, ax