如何更新matplotlib中的imshow而不覆盖新的颜色条或子批次标题?

2024-09-26 22:49:33 发布

您现在位置:Python中文网/ 问答频道 /正文

背景:我在一个数据处理应用程序中工作,并试图将matplotlib嵌入tkinter图形用户界面中的二维数组可视化。我正试图通过收集用户输入(即他们想要显示什么帧,各种其他选项)来更新matplotlib图形,因此我不想提前生成动画。

系统:Windows xp、Python 2.7、matplotlib 1.1.1rc

问题:如何只更新imshow生成的图像而不更新colorbar?

图形用户界面gui snapshot注意颜色条是如何覆盖它们的。

代码:注意:下面的代码未经测试,但它是如何设置当前代码的基本思想

import matplotlib
import matplotlib.pyplot as plt
from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg, NavigationToolbar2TkAgg
import Tkinter as tk
import numpy as np


class MainWindow:
    def __init__(self,application):
        self.mainframe=tk.Frame(application)

        #update button
        ttk.Button(application,text='Update',command=self.update).pack()

        #matplotlib setup
        self.ren2DFig=plt.figure(figsize=(4,4),dpi=100)
        self.renCanvas=FigureCanvasTkAgg(self.ren2DFig,master=self.renWin2D)
        self.renCanvas.show()
        self.renCanvas.get_tk_widget().pack()

        self.subPlot=self.ren2DFig.add_subplot(111)
        self.subPlot.get_yaxis().set_visible(False)
        self.subPlot.get_xaxis().set_visible(False)
        self.subPlot.get_axes().set_frame_on(False)
        frame=np.zeros((20,40),)
        frame[9:11 ,9:11]=1
        frame[5 ,5]=.5
        self.im=self.subPlot.imshow(self.rotate(frame), origin = 'lower')
        self.cbar=self.ren2DFig.colorbar(self.im)
        self.cbar.set_label('Solid Fraction')
        self.renCanvas.draw()
        self.ren2DFig.canvas

    def update(self):
        self.im.set_array(np.zeros((20,40),))
        self.renCanvas.draw() # I think this is the problem?

application=tk.Tk()
application.focus_force()
window=MainWindow(application)
application.protocol("WM_DELETE_WINDOW",window.close)
application.mainloop()

任何帮助都将不胜感激!谢谢!

更新[2012年7月13日]:

如果我尝试清除子块,然后添加图像和颜色栏,最后重新绘制画布,我得到:

matplotlib

我到底做错了什么??????这真的开始激怒我了。


Tags: 代码importselfgetapplicationmatplotlibasnp
2条回答

我看不出你的行为:

import matplotlib.pyplot as plt
import numpy

plt.ion()

data = numpy.arange(12).reshape(3, 4)
im = plt.imshow(data)
plt.colorbar(im)
im.set_array(5-data)
# re-draw now that we have changed the data array
plt.draw()

在不修改颜色条的情况下更新图像。你能进一步解释一下你的问题吗?

我想出来了。问题在于

self.subPlot.get_axes().set_frame_on(False)

我想是虫子什么的,但如果我把它改成真的,也就是说

self.subPlot.get_axes().set_frame_on(True)

它工作得很好,一切都像正常一样更新。

这件小事让我难堪了两天!!!想想看。哈哈

相关问题 更多 >

    热门问题