Source code for spykeutils.plot.rasterplot

from guiqwt.builder import make
from guiqwt.baseplot import BasePlot
from guiqwt.plot import BaseCurveWidget

import quantities as pq

from .. import SpykeException
from dialog import PlotDialog
import helper


@helper.needs_qt
[docs]def raster(trains, time_unit=pq.ms, show_lines=True, events=None, epochs=None): """ Create a new plotting window with a rasterplot of spiketrains. :param dict trains: Dictionary of spike trains indexed by a Neo object (Unit or Segment). :param Quantity time_unit: Unit of X-Axis. :param bool show_lines: Determines if a horizontal line will be shown for each spike train. :param sequence events: A sequence of neo `Event` objects that will be marked on the plot. """ if not trains: raise SpykeException('No spike trains for rasterplot') if not time_unit: time_unit = pq.ms win_title = 'Spike Trains' win = PlotDialog(toolbar=True, wintitle=win_title, major_grid=False) pW = BaseCurveWidget(win) plot = pW.plot if events is None: events = [] if epochs is None: epochs = [] offset = len(trains) legend_items = [] for u, t in sorted(trains.iteritems(), key=lambda (u, v): u.name): color = helper.get_object_color(u) train = helper.add_spikes(plot, t, color, 2, 21, offset, u.name, time_unit) if u.name: legend_items.append(train) if show_lines: plot.add_item(make.curve( [t.t_start.rescale(time_unit), t.t_stop.rescale(time_unit)], [offset, offset], color='k')) offset -= 1 helper.add_epochs(plot, epochs, time_unit) helper.add_events(plot, events, time_unit) plot.set_axis_title(BasePlot.X_BOTTOM, 'Time') plot.set_axis_unit(BasePlot.X_BOTTOM, time_unit.dimensionality.string) win.add_plot_widget(pW, 0) legend = make.legend(restrict_items=legend_items) plot.add_item(legend) win.add_legend_option([legend], True) if len(trains) > 1: plot.set_axis_limits(BasePlot.Y_LEFT, 0.5, len(trains) + 0.5) win.add_custom_curve_tools() win.show() return win

Project Versions

This Page