I am trying to create a multi line plot to display multiple time series data (voltages) from a 2D NumPy array. I have started very simply trying to plot two lines with ten data points from a 2x10 array, but I am not even able to get this to work without getting a large amount of error output that I am unable to debug.
Imports:
import numpy
from traits.api import HasTraits, Instance
from traitsui.api import View, Item
from chaco.api import MultiLinePlot, ArrayDataSource, MultiArrayDataSource
from enable.component_editor import ComponentEditor
Test array:
test_array = numpy.random.rand(10,2)
Display Class:
class Multi_line_graph(HasTraits):
plot = Instance(MultiLinePlot)
traits_view = View(
Item('plot',editor=ComponentEditor(), show_label=False),
width=1024, height=768, resizable=True, title="EEG Preview")
def __init__(self, my_data):
super(Multi_line_graph, self).__init__()
x = ArrayDataSource(numpy.arange(1, my_data.shape[0]))
y = my_data.transpose() #since my data columnwise
y = MultiArrayDataSource(y)
yidx = ArrayDataSource(numpy.arange(y.get_shape()[0]))
plot = MultiLinePlot(index=x, yindex=yidx, value=y)
self.plot = plot
Create Instance of Class:
my_graph = Multi_line_graph(test_array)
Display (configure traits):
my_graph.configure_traits()
Then I get a window appear but that hangs and crashes the Python kernel and this error displayed in the shell:
Exception occurred in traits notification handler for object: <chaco.multi_line_plot.MultiLinePlot object at 0x000000000D0CFD58>, trait: bounds_items, old value: <undefined>, new value: <traits.trait_handlers.TraitListEvent object at 0x000000000D18C908>
Traceback (most recent call last):
File "C:\Users\pzl46097\AppData\Local\Enthought\Canopy\User\lib\site-packages\traits\trait_notifiers.py", line 340, in __call__
self.handler( *args )
File "C:\Users\pzl46097\AppData\Local\Enthought\Canopy\User\lib\site-packages\chaco\base_xy_plot.py", line 613, in _bounds_items_changed
self._update_mappers()
File "C:\Users\pzl46097\AppData\Local\Enthought\Canopy\User\lib\site-packages\chaco\base_xy_plot.py", line 594, in _update_mappers
x_mapper.screen_bounds = (x, x2)
AttributeError: 'NoneType' object has no attribute 'screen_bounds'
Exception occurred in traits notification handler for object: <chaco.multi_line_plot.MultiLinePlot object at 0x000000000D0CFD58>, trait: bounds_items, old value: <undefined>, new value: <traits.trait_handlers.TraitListEvent object at 0x000000000D0C4C88>
Traceback (most recent call last):
File "C:\Users\pzl46097\AppData\Local\Enthought\Canopy\User\lib\site-packages\traits\trait_notifiers.py", line 340, in __call__
self.handler( *args )
File "C:\Users\pzl46097\AppData\Local\Enthought\Canopy\User\lib\site-packages\chaco\base_xy_plot.py", line 613, in _bounds_items_changed
self._update_mappers()
File "C:\Users\pzl46097\AppData\Local\Enthought\Canopy\User\lib\site-packages\chaco\base_xy_plot.py", line 594, in _update_mappers
x_mapper.screen_bounds = (x, x2)
AttributeError: 'NoneType' object has no attribute 'screen_bounds'
Exception occurred in traits notification handler.
Please check the log file for details.
I don't really know what this means. I have read and re-read the API documentation at:
http://docs.enthought.com/chaco/api/renderers.html#multilineplot
as well as the user guide documents at:
http://docs.enthought.com/chaco/user_manual/plot_types.html#multi-line-plot
but there doesn't seem to be any other documentation on this Class. I am wondering if it is not maintained and may be broken or if I am doing something wrong (I may well be as I have only been using Chaco for about 1 week and the library is new to me, as is OOP in Python in general).
Many thanks in advance for any help..