matplotlib再次显示数字

时间:2014-03-29 09:18:47

标签: python matplotlib

使用matplotlib时:

from matplotlib import pyplot as plt

figure = plt.figure()

ax = figure.add_subplot(111)
ax.plot(x,y)

figure.show()  # figure is shown in GUI

# How can I view the figure again after I closed the GUI window?

figure.show()  # Exception in Tkinter callback... TclError: this isn't a Tk application
figure.show()  # nothing happened

所以我的问题是:

  1. 如果我调用了figure.show(),我如何才能获得上一个图?

  2. 如果我有多个数据,是否有更方便的替代figure.add_suplot(111),因此from pylab import *; plot(..); show()似乎不是我正在寻找的解决方案。

  3. 我急切想要的是

    showfunc(stuff) # or
    stuff.showfunc()
    

    其中stuff是一个对象,其中包含排列在一张图片中的所有图块,showfunc是STATELESS(我的意思是,每当我调用它时,我的表现就好像它是第一次所谓的)。使用matplotlib时是否可以这样做?

1 个答案:

答案 0 :(得分:3)

我找不到满意的答案,所以我通过编写一个自定义Figure类来扩展matplotlib.figure.Figure并提供一个新的show()方法来处理这个问题,该方法会创建一个{{1每次调用对象。

gtk.Window

将此文件设为import gtk import sys import os import threading from matplotlib.figure import Figure as MPLFigure from matplotlib.backends.backend_gtkagg import FigureCanvasGTKAgg as FigureCanvas from matplotlib.backends.backend_gtkagg import NavigationToolbar2GTKAgg as NaviToolbar class ThreadFigure(threading.Thread): def __init__(self, figure, count): threading.Thread.__init__(self) self.figure = figure self.count = count def run(self): window = gtk.Window() # window.connect('destroy', gtk.main_quit) window.set_default_size(640, 480) window.set_icon_from_file(...) # provide an icon if you care about the looks window.set_title('MPL Figure #{}'.format(self.count)) window.set_wmclass('MPL Figure', 'MPL Figure') vbox = gtk.VBox() window.add(vbox) canvas = FigureCanvas(self.figure) vbox.pack_start(canvas) toolbar = NaviToolbar(canvas, window) vbox.pack_start(toolbar, expand = False, fill = False) window.show_all() # gtk.main() ... should not be called, otherwise BLOCKING class Figure(MPLFigure): display_count = 0 def show(self): Figure.display_count += 1 thrfig = ThreadFigure(self, Figure.display_count) thrfig.start() 的起始文件。和

IPython

作品!我从未接触到GUI编程,也不知道这是否会产生任何副作用。如果你认为应该以这种方式做某事,请自由评论。