Using LogMapper for both axes
mag = LinePlot(index = ArrayDataSource(w, sort_order='ascending'),
value = ArrayDataSource(H),
color = curve_color,
name = curve_name,
index_mapper = LogMapper(range=view_mag.index_range),
value_mapper = LogMapper(range=view_mag.value_range))
leads to the error below, when adding a cursor with following lines
cursor1 = CursorTool(mag,
drag_button="left",
show_value_line=False,
show_marker=True,
line_width=2.0,
color='black')
mag.overlays.append(cursor1)
The problem is, that LogMapper.map_screen returns a 1-element array, while LinearMapper returns a scalar value, if only one data point has to be mapped.
Following subclass of LogMapper works for me as a workaround
class LogMapperCorr(LogMapper):
"""
Corrects chaco.log_mapper.LogMapper for the usage with cursors. Cursors need
a 1D-array iterable to unpack the x and y values and the LogMapper returns
a 2D-array. Therefore LogMapper.map_screen has to return a scalar, if the length
of the data array is 1.
"""
def __init__(self, *args, **kwargs):
LogMapper.__init__(self, *args, **kwargs)
def map_screen(self, data_array):
arr = LogMapper.map_screen(self, data_array)
if len(arr)==1:
return arr[0]
else:
return arr
Traceback (most recent call last):
File "C:\Users\speschda\AppData\Local\Enthought\Canopy\User\lib\site-packages\enable\qt4\base_window.py", line 198, in paintEvent
self.handler.paintEvent(event)
File "C:\Users\speschda\AppData\Local\Enthought\Canopy\User\lib\site-packages\enable\qt4\base_window.py", line 50, in paintEvent
self._enable_window._paint(event)
File "C:\Users\speschda\AppData\Local\Enthought\Canopy\User\lib\site-packages\enable\abstract_window.py", line 467, in _paint
self.component.draw(gc, view_bounds=(0, 0, size[0], size[1]))
File "C:\Users\speschda\AppData\Local\Enthought\Canopy\User\lib\site-packages\enable\component.py", line 424, in draw
self._draw(gc, view_bounds, mode)
File "C:\Users\speschda\AppData\Local\Enthought\Canopy\User\lib\site-packages\enable\component.py", line 776, in _draw
self._dispatch_draw(layer, gc, view_bounds, mode)
File "C:\Users\speschda\AppData\Local\Enthought\Canopy\User\lib\site-packages\enable\container.py", line 272, in _dispatch_draw
component._dispatch_draw(layer, gc, new_bounds, mode)
File "C:\Users\speschda\AppData\Local\Enthought\Canopy\User\lib\site-packages\enable\container.py", line 272, in _dispatch_draw
component._dispatch_draw(layer, gc, new_bounds, mode)
File "C:\Users\speschda\AppData\Local\Enthought\Canopy\User\lib\site-packages\enable\component.py", line 796, in _dispatch_draw
handler(gc, view_bounds, mode)
File "C:\Users\speschda\AppData\Local\Enthought\Canopy\User\lib\site-packages\enable\component.py", line 874, in _draw_overlay
overlay.overlay(self, gc, view_bounds, mode)
File "C:\Users\speschda\AppData\Local\Enthought\Canopy\User\lib\site-packages\chaco\tools\line_inspector.py", line 106, in overlay
self.draw(gc, view_bounds)
File "C:\Users\speschda\AppData\Local\Enthought\Canopy\User\lib\site-packages\chaco\tools\cursor_tool.py", line 183, in draw
sx, sy = plot.map_screen(self.current_position)
ValueError: need more than 1 value to unpack
Using LogMapper for both axes
leads to the error below, when adding a cursor with following lines
The problem is, that LogMapper.map_screen returns a 1-element array, while LinearMapper returns a scalar value, if only one data point has to be mapped.
Following subclass of LogMapper works for me as a workaround