在一个PyQT Gui窗口中添加一些pandas图

时间:2015-06-02 14:13:42

标签: python pandas plot pyqt


我希望将我的情节添加到pyqt ui 我正在使用大熊猫作为情节。

data= pandas.DataFrame(pandas.read_sql(sql, my_connection))
data[data['GENERAL_TYPE']=='phone'].pivot_table('CEID','CONTACTED_PERSON_NEW','RESULT',  aggfunc='count').plot(kind='bar', stacked=True, figsize=(10,10))
data[data['GENERAL_TYPE']=='phone'].pivot_table(['CEID'],['CONTACTED_PERSON_NEW'],['DATA4_CAMP'],  aggfunc='count').plot(kind='bar',figsize=(10,10), stacked=True)
data[data['GENERAL_TYPE']=='phone'].pivot_table(['CEID'],['CONTACTED_PERSON_NEW'],  aggfunc='count').plot(kind='pie',subplots=True, legend=False, stacked=False, figsize=(10,10)) 

在此之后,我的情节很少:

我如何使用这个例子(How to embed matplotib in pyqt - for Dummies) 在一个窗口中将我的绘图添加到不同的布局?

1 个答案:

答案 0 :(得分:0)

您提供的示例不会为我运行,另外它包含错误,如其中一条评论中所述。在PyQt中嵌入时,您无法使用plt.figure(),因为这会启动自己的事件循环。您必须改为使用matplotlib.Figure()。我强烈建议您将代码基于Matplotlib文档中的this example,而不是“for Dummies”的答案。

如果你在PyQt中有一个常规的Matplotlib图,你可以继续尝试一个Pandas图。我不太了解熊猫,但在我看来,Pandas默认情况下绘制到当前轴。嵌入PyQt时这不起作用; plt.figure()设置当前轴,但我们必须使用matplotlib.Figure(),因此没有当前轴。但是,我认为Pandas plot命令接受ax关键字参数。这允许您传递自己的轴对象(在示例中使用self.axes = fig.add_subplot(111)定义)

在Matplotlib示例中,您可以尝试替换

self.axes.plot(...)

使用您的Pandas plot命令并传递ax=self.axes。像这样的东西

data[...].pivot_table(...).plot(ax=self.axes, ...)

如果这不起作用,我会问熊猫社区。我会添加一个标签。