我在单独的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()看到会发生什么,结果生成了两个图。
答案 0 :(得分: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导入并查看错误弹出的位置。