我开发了一个使用python pyqt的gui。在那里,我有一个matplotlib图形,需要用QSlider动态更改x,y-Data和vlines。更改gui中的matplotlib数据
现在我改变数据只是再次删除一切和情节,但这不是有效
这是我要做的事:
def update_verticalLines(self, Data, xData, valueSlider1, valueSlider2, PlotNr, width_wg):
if PlotNr == 2:
self.axes.cla()
self.axes.plot(xData, Data, color='b', linewidth=2)
self.axes.vlines(valueSlider1,min(Data),max(Data),color='r',linewidth=1.5, zorder = 4)
self.axes.vlines(valueSlider2,min(Data),max(Data),color='r',linewidth=1.5, zorder = 4)
self.axes.text(1,0.8*max(Data),str(np.round(width_wg,2))+u"µm", fontsize=16, bbox=dict(facecolor='m', alpha=0.5))
self.axes.text(1,0.6*max(Data),"Pos1: "+str(round(valueSlider1,2))+u"µm", fontsize=16, bbox=dict(facecolor='m', alpha=0.5))
self.axes.text(1,0.4*max(Data),"Pos2: "+str(round(valueSlider2,2))+u"µm", fontsize=16, bbox=dict(facecolor='m', alpha=0.5))
self.axes.grid(True)
self.draw()
“vlines”是matplotlib LineCollections。我在文档中搜索,但找不到像'set_xdata'这样的函数提示如何在已经绘制并嵌入到FigureCanvas中时更改垂直线的x值?
我有改变x和y数据的同样的问题。当尝试像'set_data'这样的matplotlib的已知函数时,我得到一个错误,即AxisSubPlot没有这个属性。
以下是我为图形漫画类的代码。 def update_verticalLines应该只包含用于改变vlines的x坐标而不完成重绘的命令。
编辑:解
感谢@Craigular乔 这是它不完全是如何为我工作。我需要改变一些东西:
def update_verticalLines(self, Data, xData, valueSlider1, valueSlider2, PlotNr, width_wg):
self.vLine1.remove()
self.vLine1 = self.axes.vlines(valueSlider1,min(Data), max(Data), color='g', linewidth=1.5, zorder = 4)
self.vLine2.remove()
self.vLine2 = self.axes.vlines(valueSlider2,min(Data), max(Data), color='g', linewidth=1.5, zorder = 4)
self.axes.draw_artist(self.vLine1)
self.axes.draw_artist(self.vLine2)
#self.update()
#self.flush_events()
self.draw()
更新()没有工作没有绘制()。 (旧vlines留下) flush_events()做了一些疯狂的东西。我有两个FigureCanvas实例。 flush_events()导致在第二个实例中调用使用滑块移动的vlines,然后移回到开始位置。
谢谢!我的vlines现在正在快速移动滑块。但我无法使用flush_events()。二审的情况并未与此有关。 – Saorsa