如何在不清除其他线条(即整个图)的情况下更新Matplotlib散点图?

时间:2020-04-27 13:09:10

标签: python matplotlib tkinter

我在Tkinter窗口中嵌入了一个图形,每当我使用滑块玩游戏时,我都希望更新其中一个散点图,而不要更新其他散点图。这是我的身影:

enter image description here

彩色的“线”实际上是每个蓝点之间的多个散点图。我只希望更新彩色的线条和蓝色的点,别无其他(例如,后面的黑色图,蓝色的点和颜色条不会被清除)。这是我生成此图的代码:

def plot():
    global ENL
    global figStress
    global figDisp
    global dispx
    global dispy
    global horizontal

    n = np.size(ENL,0)
    num = 1
    newlist = []
    count = True
    for e in range(0,n):
        dispx = ENL[e,8] * horizontal.get()
        dispy = ENL[e,9] * horizontal.get()
        netdisp = math.sqrt(dispx**2+dispy**2)
        x = ENL[e,0] + dispx
        y = ENL[e,1] + dispy
        newlist.append((num,x,y,netdisp))
        if count:
            disparray = np.array([netdisp])
            count = False
        else:
            disparray = np.hstack([disparray,netdisp])
        figDisp.add_subplot(111).plot(x,y,'o', markersize=10, markeredgecolor='k',markerfacecolor='deepskyblue', alpha=1,zorder=10)
        num +=1
    generalmaxdisp = disparray.max()
    generalmindisp = disparray.min()
    for a in range(0,np.size(EL,0)):
        node1 = EL[a,0]
        node2 = EL[a,1]
        for el in newlist:
            if node1 == el[0]:
                x1 = el[1]
                y1 = el[2]
                disp1 = el[3]
            if node2 == el[0]:
                x2 = el[1]
                y2 = el[2]
                disp2 = el[3]
        ax = figDisp.add_subplot(111)


        m = (y2-y1)/(x2-x1)
        x = np.linspace(x1,x2,100)
        y = m*(x-x1)+y1

        maxdisp = np.array([disp1,disp2]).max()
        mindisp = np.array([disp1,disp2]).min()

        norm = Normalize(generalmindisp, generalmaxdisp)

        compare = np.array([generalmindisp,mindisp,maxdisp,generalmaxdisp])
        for i in range(0,len(compare)):
            compare[i] = (compare[i] - generalmindisp) / (generalmaxdisp - generalmindisp)

        cmap = truncate_colormap(plt.get_cmap("jet"), compare[1], compare[2])
        c = np.linspace(compare[0],compare[3],100)

        ax.scatter(x,y, c=c/c.max(),cmap = cmap, s=3, edgecolor='none')  
        if x1 == x2:
            x = np.linspace(x1,x2,100)
            y = np.linspace(y1,y2,100)
            ax.scatter(x,y, c=c,cmap = cmap, s=3, edgecolor='none')

    cb = figDisp.colorbar(ScalarMappable(norm=norm,cmap=plt.get_cmap('jet')))
    canvasDisp.draw()

编辑:将要删除的地块添加到列表中并保留其余部分似乎已经解决了我的问题。

0 个答案:

没有答案