def plot_dynamics(dynamics, ax=None, start=2, n_columns=None, n_regions=None, clim=[-1, 1], region=None, node=None, column=None, cmap=None): if ax is None: ax = plt.gca() if (column is not None) or (region is not None) or (node is not None): n_nodes = (len(dynamics.T) // n_columns - 1) // n_regions sel = select_nodes(n_columns=n_columns, n_regions=n_regions, n_nodes=n_nodes, node=node, region=region, column=column) dynamics = dynamics[:, sel] if cmap is None: cmap = nonlinear_cmap('RdBu_r', 0, clim) clim = [0., 1.] ax.matshow(dynamics.T, vmin=clim[0], vmax=clim[1], cmap=cmap, origin='lower') if (isinstance(column, list) and len(column) == 1): for ii in range(n_columns): ax.axhline(ii * (len(dynamics.T) // n_columns) - .5, color='gray', linestyle=':') ax.set_ylabel('Modules') ax.set_xlabel('Times') ax.set_aspect('auto') if not isinstance(start, (list, np.ndarray)): start = [start] for start_ in start: ax.set_xticks([start_ - .5]) ax.set_xticklabels([start_ - start[0]]) for start_ in start: ax.axvline(start_ - .5, color='k') pretty_plot(ax)
def plot_dynamics(dynamics, ax=None, start=2, n_columns=None, n_regions=None, clim=[-1, 1], region=None, node=None, column=None, cmap=None): if ax is None: ax = plt.gca() if (column is not None) or (region is not None) or (node is not None): n_nodes = (len(dynamics.T) // n_columns - 1) // n_regions sel = select_nodes(n_columns=n_columns, n_regions=n_regions, n_nodes=n_nodes, node=node, region=region, column=column) dynamics = dynamics[:, sel] if cmap is None: cmap = nonlinear_cmap('RdBu_r', 0, clim) clim = [0., 1.] ax.matshow(dynamics.T, vmin=clim[0], vmax=clim[1], cmap=cmap, origin='lower') if (isinstance(column, list) and len(column) == 1): for ii in range(n_columns): ax.axhline(ii * (len(dynamics.T) // n_columns) - .5, color='gray', linestyle=':') ax.set_ylabel('Modules') ax.set_xlabel('Time') ax.set_aspect('auto') if not isinstance(start, (list, np.ndarray)): start = [start] for start_ in start: ax.set_xticks([start_ - .5]) ax.set_xticklabels([start_ - start[0]]) for start_ in start: ax.axvline(start_ - .5, color='k') pretty_plot(ax)
def plot_connectivity(connectivity, ax=None, dual=False): if ax is None: ax = plt.gca() ax.matshow(connectivity, cmap='RdBu_r', vmin=-1, vmax=1, origin='lower') ax.set_xticks([]) ax.set_yticks([]) if dual: n_nodes = connectivity.shape[0] ax.set_xticks([n_nodes / 4.-.5, n_nodes / 2.-.5, .75 * n_nodes-.5, n_nodes-.5]) ax.set_xticklabels(['feedforward', '', 'feedback', '']) ax.set_yticks([n_nodes / 4.-.5, n_nodes / 2.-.5, .75 * n_nodes-.5, n_nodes-.5]) ax.set_yticklabels(['feedforward', '', 'feedback', '']) ax.axhline(n_nodes/2.-.5, color='gray', linestyle=':') ax.axvline(n_nodes/2.-.5, color='gray', linestyle=':') ax.set_xlabel('neurons') # ax.set_ylabel('neurons') pretty_plot(ax)
def plot_connectivity(connectivity, ax=None, dual=False): if ax is None: ax = plt.gca() ax.matshow(connectivity, cmap='RdBu_r', vmin=-1, vmax=1, origin='lower') ax.set_xticks([]) ax.set_yticks([]) if dual: n_nodes = connectivity.shape[0] ax.set_xticks([ n_nodes / 4. - .5, n_nodes / 2. - .5, .75 * n_nodes - .5, n_nodes - .5 ]) ax.set_xticklabels(['feedforward', '', 'feedback', '']) ax.set_yticks([ n_nodes / 4. - .5, n_nodes / 2. - .5, .75 * n_nodes - .5, n_nodes - .5 ]) ax.set_yticklabels(['feedforward', '', 'feedback', '']) ax.axhline(n_nodes / 2. - .5, color='gray', linestyle=':') ax.axvline(n_nodes / 2. - .5, color='gray', linestyle=':') ax.set_xlabel('neurons') # ax.set_ylabel('neurons') pretty_plot(ax)
def make_3d_plot(ax, xs, y, zs, colors): # make areas verts = [] verts_sem = [] for ii in range(y.shape[2]): ys = np.mean(y[:, :, ii], axis=0) verts.append(list(zip(np.hstack((0., xs, 1.)), np.hstack((0., ys, 0.))))) ys += np.std(y[:, :, ii], axis=0) / np.sqrt(len(subjects)) verts_sem.append(list(zip(np.hstack((0., xs, 1.)), np.hstack((0., ys, 0.))))) poly = PolyCollection(verts, facecolors=colors, edgecolor='k', linewidth=1) poly.set_alpha(.75) ax.add_collection3d(poly, zs=zs, zdir='y') poly = PolyCollection(verts_sem, facecolors=colors, edgecolor='none') poly.set_alpha(0.5) ax.add_collection3d(poly, zs=zs, zdir='y') return pretty_plot(ax)
sig = p_val < .05 # plot effect size scores = np.mean(scores, axis=0) im = ax.matshow(scores, aspect='auto', origin='lower', extent=[times[0], times[-1], 0, len(freqs)], vmin=analysis['chance'], vmax=np.max(scores), cmap=analysis['cmap']) # plot stats xx, yy = np.meshgrid(times, range(len(freqs)), copy=False, indexing='xy') ax.contour(xx, yy, sig, colors='black', levels=[0], linestyles='dotted') # pretty plot pretty_plot(ax) ticks = [0] for freq in np.arange(10, 71, 10): ticks.append(np.where(np.round(freqs) >= freq)[0][0]) ticks.append(len(freqs)) ax.set_yticks(ticks) ax.set_yticklabels([]) if ii in [0, (len(analyses)//2)]: ax.set_yticklabels([int(freqs[0]), 10, '', 30, '', '', '', '', int(freqs[-1] + .1)]) xticks = np.arange(-.200, 1.301, .100) ax.set_xticks(xticks) ax.set_xticklabels([]) if ii >= (len(analyses)//2): ax.set_xticklabels([int(tim * 1e3) if tim in [.0, .800] else '' for tim in xticks])
zorder = float(vis == 'low') y_shift = .1 * float(vis == 'high') times = np.linspace(0, 2., len(diag.mean(0))) + .1 * int(vis == 'low') axes['decod'].fill_between( times, .5 + y_shift, diag.mean(0) + y_shift, color=colors[vis], alpha=1., linewidth=0., zorder=zorder) axes['decod'].plot(times, diag.mean(0) + y_shift, color='k', zorder=zorder) axes['decod'].set_xticks([]) axes['decod'].set_yticks([]) axes['decod'].set_aspect('equal') for side in ('left', 'right', 'top', 'bottom'): axes['decod'].spines[side].set_visible(False) axes['decod'].set_ylim(-.1, 1.1) # Temporal generalization scores axes[vis].matshow(score.mean(0), origin='lower', vmin=0, vmax=1., cmap='RdBu_r') axes[vis].set_xticks([]) axes[vis].set_yticks([]) pretty_plot(axes[vis]) # TG subtraction: high vis - low vis axes['vis'].matshow(np.mean(scores[:, 1] - scores[:, 0], axis=0), origin='lower', vmin=-.25, vmax=.25, cmap='RdBu_r') axes['vis'].set_xticks([]) axes['vis'].set_yticks([]) pretty_plot(axes['vis']) report.add_figs_to_section([fig], [model], model) report.save()
fill = lambda z, c: ax.fill_between(np.linspace(0, 1., 4.), z, alpha=.5, color=cmap(c), edgecolor='none') fill(abs_sem, 0.) fill(pst_sem, 1.) fill(abs_m, 0.) fill(pst_m, 1.) ax.text(0.1, np.mean(x_vis[:, 0, 0], axis=0) - .05, 'Absent', color=cmap(0.), ha='left', va='bottom') ax.text(1., np.mean(x_vis[:, -1, -1], axis=0) + .05, 'Present', color=cmap(1.), ha='right', va='bottom') ax.set_xlabel('Visibility Rating') ax.set_ylabel('Response %') ax.set_xticks(np.linspace(0, 1, 2)) ax.set_yticks(np.linspace(0, .7, 2)) ax.set_ylim(0, .75) ax = pretty_plot(ax) report.add_figs_to_section(fig, 'visibility 2d', 'visibility') # ############################################################################# # 2.0 Overall discrimination performance x = dict(Accuracy=list(), Dprime=list()) for subject in subjects: query = 'subject==%s and target_present==True' % subject x['Accuracy'].append(np.nanmean(data.query(query)['discrim_correct'])) def count(tilt, acc): query2 = ' and probe_tilt==%s and discrim_correct==%s' % (tilt, acc) return len(data.query(query + query2)) hits = count(1, True)