我开发了一个程序,可以绘制出光谱仪的输入信号。我正在尝试与之通信的设备被评定为发送不超过3像素的坏信息(这部分是不可避免的)。我要做的是让一个选择器挑选出3个可能的坏数据位,这样我就可以在固件中解释它们,因为这三个点没有改变。到目前为止,我的应用程序可以激活选择器(通过ctrl-shift-f12热键),并且可以按预期选择和取消选择数据点。当我试图使用NabigationToolbar2Wx()中提供的matplotlibs缩放或平移工具时,问题就出现了。当我尝试使用其中一种时,我会得到:
ValueError: 'markevery' is iterable but not a valid form of numpy fancy indexing; markevery=[283, 286, 290, 292]
我使用的是python2.7.9,matplotlib和wxPython演示。在
def on_pixel_picker(self, event):
self.CaptureMouse()
mouseevent = event.mouseevent
line = self.axes.get_lines()[0]
index = list(line.get_xdata()).index(int(mouseevent.xdata))
if mouseevent.button is not 1:
try:
self.markers.remove(index)
except ValueError:
pass
line.set_markevery(self.markers)
self.figure.canvas.draw()
self.ReleaseMouse()
return
if index in self.markers:
return
self.markers.append(index)
self.markers.sort()
line.set_marker('o')
line.set_markevery(self.markers)
self.figure.canvas.draw()
self.ReleaseMouse()
回溯如下:
^{pr2}$你知道我为什么会犯这个错误吗?我该怎么解决它?我的数据点非常接近,所以这个缩放和平移功能是必要的。在
我为那些感兴趣或可能有同样问题的人想出了这个办法。我先把这个问题解释清楚一点。当向左平移绘图时,标记将保持在屏幕上与图形移动相同的位置;这意味着当您移动图形时,标记将跟踪图形。如果您将其向左移动到该点落在直线上,则发生异常。如果您将它移到右侧,标记将保持在行上的正确位置,但如果您将其移出屏幕,则会发生异常。工具栏上的缩放工具根本不起作用。我一点击它就给了我一个例外。深入了解matplotib源代码线条.py第730行左右,它检查markevery并相应地绘制;但是,如果markevery不在可见索引中,则会发生异常。在
我做了修正:
^{pr2}$以确保点是可见的,并获取t路径顶点,而不是整个路径的索引。这是阻止它在平移时跟踪图形的关键。此修复还解决了缩放工具的问题。在
相关问题 更多 >
编程相关推荐