Skip to content

Commit

Permalink
Merge pull request #108 from Hananel-Hazan/old-hassaan
Browse files Browse the repository at this point in the history
Reverting to old plotting spikes function
  • Loading branch information
djsaunde committed Aug 2, 2018
2 parents ef06c51 + 11c607d commit dffb634
Showing 1 changed file with 88 additions and 0 deletions.
88 changes: 88 additions & 0 deletions bindsnet/analysis/plotting.py
Original file line number Diff line number Diff line change
Expand Up @@ -59,6 +59,92 @@ def plot_spikes(network: Optional[Network] = None, spikes: Optional[Dict[str, to
n_neurons: Optional[Dict[str, Tuple[int, int]]] = None, ims=None, axes: List[AxesImage] = None,
figsize: Tuple[float, float] = (8.0, 4.5)) -> Tuple[List[AxesImage], List[Axes]]:
# language=rst
"""
Plot spikes for any group(s) of neurons.
:param spikes: Mapping from layer names to spiking data.
:param time: Plot spiking activity of neurons in the given time range. Default is entire simulation time.
:param n_neurons: Plot spiking activity of neurons in the given range of neurons. Default is all neurons.
:param ims: Used for re-drawing the plots.
:param axes: Used for re-drawing the plots.
:param figsize: Horizontal, vertical figure size in inches.
:return: ``ims, axes``: Used for re-drawing the plots.
"""

n_subplots = len(spikes.keys())
spikes = {k : v.view(-1, v.size(-1)) for (k, v) in spikes.items()}

if time is not None:
assert len(time) == 2, 'Need (start, stop) values for time argument'
assert time[0] < time[1], 'Need start < stop in time argument'
else:
# Set it for entire duration
for key in spikes.keys():
time = (0, spikes[key].shape[1])
break

if len(n_neurons.keys()) != 0:
assert len(n_neurons.keys()) <= n_subplots, \
'n_neurons argument needs fewer entries than n_subplots'
assert all(key in spikes.keys() for key in n_neurons.keys()), \
'n_neurons keys must be subset of spikes keys'

# Use all neurons if no argument provided.
for key, val in spikes.items():
if key not in n_neurons.keys():
n_neurons[key] = (0, val.shape[0])

if not ims:
fig, axes = plt.subplots(n_subplots, 1, figsize=figsize)
ims = []

if n_subplots == 1:
for datum in spikes.items():
ims.append(axes.imshow(spikes[datum[0]][n_neurons[datum[0]][0]:n_neurons[datum[0]][1],
time[0]:time[1]],
cmap='binary'))

args = (datum[0], n_neurons[datum[0]][0], n_neurons[datum[0]][1], time[0], time[1])
plt.title('%s spikes for neurons (%d - %d) from t = %d to %d ' % args)
plt.xlabel('Simulation time'); plt.ylabel('Neuron index')
axes.set_aspect('auto')
else:
for i, datum in enumerate(spikes.items()):
ims.append(axes[i].imshow(datum[1][n_neurons[datum[0]][0]:n_neurons[datum[0]][1],
time[0]:time[1]],
cmap='binary'))

args = (datum[0], n_neurons[datum[0]][0], n_neurons[datum[0]][1], time[0], time[1])
axes[i].set_title('%s spikes for neurons (%d - %d) from t = %d to %d ' % args)

for ax in axes:
ax.set_aspect('auto')

plt.setp(axes, xticks=[], yticks=[], xlabel='Simulation time', ylabel='Neuron index')
plt.tight_layout()

else:
if n_subplots == 1:
for datum in spikes.items():
ims[0].set_data(datum[1][n_neurons[datum[0]][0]:n_neurons[datum[0]][1], time[0]:time[1]])
ims[0].autoscale()

args = (datum[0], n_neurons[datum[0]][0], n_neurons[datum[0]][1], time[0], time[1])
axes.set_title('%s spikes for neurons (%d - %d) from t = %d to %d ' % args)

else:
for i, datum in enumerate(spikes.items()):
ims[i].set_data(datum[1][n_neurons[datum[0]][0]:n_neurons[datum[0]][1], time[0]:time[1]])
ims[i].autoscale()

args = (datum[0], n_neurons[datum[0]][0], n_neurons[datum[0]][1], time[0], time[1])
axes[i].set_title('%s spikes for neurons (%d - %d) from t = %d to %d ' % args)

plt.draw()
return ims, axes


def plot_spikes_new(network=None, spikes=None, layer_to_monitor={}, layers=[], time={}, n_neurons={}, ims=None, axes=None, figsize=(8, 4.5)):
"""
Plot spikes for any group(s) of neurons. Default behavior will plot everything.
Expand All @@ -78,6 +164,8 @@ def plot_spikes(network: Optional[Network] = None, spikes: Optional[Dict[str, to
if layer_to_monitor is None:
layer_to_monitor = {}

assert network is not None or spikes is not None, 'No plotting information'

if time is None:
time = {}

Expand Down

0 comments on commit dffb634

Please sign in to comment.