用Python / Matplotlib更新图 - 交互式图

时间:2017-11-14 23:38:19

标签: python button matplotlib interactive figure

我试图使用Python / Matplotlib创建一个交互式图形,只需按一下按钮就可以向右移动一个圆圈。我的代码部分工作在于按下按钮更新圆坐标并将圆圈向右移动到绘图上。然而旧的圆圈仍然被绘制,这不是我想要的。我希望只在图表上绘制新的更新圆圈。

这是按钮点击前的当前情况:

img

点击几个按钮后:

img

我尝试使用plt.draw(),但效果不是很好。

我首先定义我的轴:

"Create Figure and plot circle Subplot"
figure1 = plt.figure()                                    # Main Figure to contain all subplots and button panel
CircSubplot = figure1.add_subplot(1,1,1, aspect= 'equal')

# -- Axes with centred spines --
CircSubplot.spines['left'].set_position('center')
CircSubplot.spines['right'].set_color('none')
CircSubplot.spines['bottom'].set_position('center')
CircSubplot.spines['top'].set_color('none')
CircSubplot.spines['left'] #.set_smart_bounds(True)
CircSubplot.spines['bottom'] #.set_smart_bounds(True)
CircSubplot.xaxis.set_ticks_position('bottom')
CircSubplot.yaxis.set_ticks_position('left')

# -- Sets scale for axes --
axesScaleFactor = 3         # Sets the scale of the axis wrt to circle radius
axCircSubplot = plt.gca()   # get current axes object
axCircSubplot.set_xlim([-circRadius*axesScaleFactor,circRadius*axesScaleFactor])    #set x-axes range
axCircSubplot.set_ylim([-circRadius*axesScaleFactor,circRadius*axesScaleFactor])    #set y-axes range 

然后我定义了一个回调函数,该函数在按下按钮时运行:

class Index(object):
    xinc = 0

    def right(self, event):
        self.xinc += 1
        i = self.xinc
        circCentre = [i,0] #Increments circle x co-ordinates by 1
        UpdatedCircVec = CircleVector(circCentre[0],circCentre[1],circRadius,circPoints)     #CircleVector function returns a 2D array containing X and Y co-ordinates for the circle 
        Upper = CircUpper(UpdatedCircVec)          #Function splits the CircleVector into portions for upper circle segment
        Lower = CircLower(UpdatedCircVec)          #Function splits the CircleVector into portions for lower circle segment
        CircSubplot.plot(Upper[0],Upper[1],'b')     #Plot upper circle segment
        CircSubplot.plot(Lower[0],Lower[1],'b')     #Plot lower circle segment
        plt.draw()

任何帮助都将不胜感激。

1 个答案:

答案 0 :(得分:0)

在绘制新移位的圆之前先清除轴。

有几种方法可以执行此操作,但是最简单的方法是在绘制新数据之前插入plt.cla()。 这应该给您一个干净的“当前轴”。