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()
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, )
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,
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, )
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)
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, )
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
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] # ## # %%
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