0

我在单独的 GtkNotebook 选项卡和不同的类中有以下代码:

1号地块:

        self.vsm_fig = plt.figure(1)  
        subplots_adjust(bottom=0.20)
        self.vsm_canvas = FigureCanvas(self.vsm_fig)  
        self.vsm_chart_vbox.pack_start(self.vsm_canvas)
        self.vsm_toolbar = NavigationToolbar(self.vsm_canvas, self.vsm_chart_vbox)
        self.vsm_chart_vbox.pack_start(self.vsm_toolbar,False,False, 3)

        if len(results_vsm) >= 1: 
            for key,value in results_vsm.items():   
                plt.plot([0,1],[0,value], label=key) 
            plt.axis([0, 1, 0, 1])
            plt.legend()
            plt.show()
            self.vsm_canvas.draw() 

情节2:

        self.tf_idf_fig = plt.figure(2)     
        subplots_adjust(bottom=0.20)
        self.tf_idf_canvas = FigureCanvas(self.tf_idf_fig)  
        self.tf_idf_chart_vbox.pack_start(self.tf_idf_canvas)
        self.tf_idf_toolbar = NavigationToolbar(self.tf_idf_canvas, self.tf_idf_chart_vbox)
        self.tf_idf_chart_vbox.pack_start(self.tf_idf_toolbar,False,False, 3)

        if len(results_tfidf) >= 1:  
            plt.bar(*zip(*zip(count(), results_tfidf.values())))
            plt.title("TF IDF Chart")
            plt.xticks(*zip(*zip(count(), results_tfidf.keys())),rotation='vertical')
            plt.xlabel("Word")
            plt.ylabel("TF*IDF") 
            self.tf_idf_canvas.draw()  

为什么当我执行第二个选项卡的 self.tf_idf_canvas.draw() 时,不会生成绘图。我试图用 plt.show() 查看会发生什么,结果生成了两个图。

4

1 回答 1

1

将后端提供的 matplotlib 类与 pylab 或 pyplot 的命令混合在一起通常不是一个好主意。我遇到了很多问题(memleaks 等),直到我清除了所有 pylab 调用并只使用了类方法。

所以添加你需要的进口,比如

from matplotlib.figure import Figure
from matplotlib.backends.backend_gtkagg import\
    FigureCanvasGTKAgg as FigureCanvas
from matplotlib.backends.backend_gtkagg import\
    NavigationToolbar2GTKAgg as NavigationToolbar

等等,无论你想使用什么 gtk 后端。

然后,

self.vsm_fig = Figure()
self.vsm_fig.subplots_adjust(bottom=0.20)
...
    plot = self.vsm_fig.add_subplot()
    plot.bar(*zip(*zip(count(), results_tfidf.values())))
    plot.set_title("TF IDF Chart")
    plot.set_xticks(*zip(*zip(count(), results_tfidf.keys())),rotation='vertical')
    plot.set_xlabel("Word")
    plot.set_ylabel("TF*IDF")
    self.vsm_canvas.show_now()

并相应地与第二个情节。确保您什么都忘记的最简单方法是删除 pylab 或 pyplot 导入并查看错误弹出的位置。

于 2013-06-14T19:31:55.243 回答