背景:我正在开发一个数据处理应用程序,并尝试使用嵌入到tkinter gui中的matplotlib可视化2D数组。我试图通过收集用户输入(即他们想要显示什么帧,各种其他选项)来更新matplotlib图,所以我不想提前生成动画。
系统: Windows xp,Python 2.7,matplotlib 1.1.1rc
问题:如何仅更新imshow生成的图像而非彩色条?
GUI 注意颜色条如何写在自己身上。
代码: 注意:以下代码未经过测试,但这是我当前代码设置方式的基本概念
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日]:
如果我尝试清除子图,然后再添加图像和颜色条,最后重新绘制画布我得到了:
我到底做错了什么??????这真的开始让我恼火。
答案 0 :(得分:1)
我明白了。问题在于
self.subPlot.get_axes().set_frame_on(False)
我想这是一个错误或者其他什么,但如果我把它改为True,即
self.subPlot.get_axes().set_frame_on(True)
它工作正常,一切都像平常一样更新。
这件小事让我难过了两天!去搞清楚。洛尔。
答案 1 :(得分:0)
我没有看到你所看到的行为:
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()
在不修改颜色条的情况下更新图像。你能进一步解释一下你遇到的问题吗?