def plot_percepts( percepts, colormap, ax=None, figsize=(2, 8), tick_fontsize=10, label_fontsize=12, title_fontsize=14, title=“Percepts”, xticks=None, xtick_labels=None, yticks=None, ytick_labels=None, **imshow_kwargs ): if ax is None: fig, ax = plt.subplots(figsize=figsize) show = True else: fig = ax.figure show = False # Don’t show if plotting to existing axis
T = np.shape(percepts)[0]
n_percept_features = np.shape(percepts)[1]
extent = (0, n_percept_features, T, 0) # left, right, bottom, top
if colormap is None:
ax.imshow(percepts, aspect="auto", interpolation='nearest', extent=extent,**imshow_kwargs)
else:
cmap = ListedColormap(colormap)
ax.imshow(percepts, cmap=cmap, aspect="auto", interpolation='nearest', vmin=0, vmax=len(colormap)-1, extent=extent,**imshow_kwargs)
ax.set_title(title, fontsize=title_fontsize)
ax.set_ylabel("Time Step", fontsize=label_fontsize)
ax.invert_yaxis()
if xticks is not None:
ax.set_xticks(xticks)
ax.set_xlabel("Feature", fontsize=label_fontsize)
if xtick_labels is not None:
ax.set_xticklabels(xtick_labels, fontsize=tick_fontsize)
else:
ax.set_xticks([])
if yticks is None:
yticks = np.arange(T)
ax.set_yticks(yticks + 0.5)
# Use np.linspace to select at most 5 tick labels if ncols > 10
if ytick_labels is None:
if T > 10:
idxs = np.linspace(0, T - 1, num=5, dtype=int)
ytick_labels = [str(i+1) if i in idxs else "" for i in yticks]
else:
ytick_labels = [str(i+1) for i in yticks]
ax.set_yticklabels(ytick_labels, fontsize=tick_fontsize)
else:
ax.set_yticks(yticks)
if ytick_labels is not None:
ax.set_yticklabels(ytick_labels, fontsize=tick_fontsize)
if show:
plt.show()
else:
return ax