嵌入式plotWindow中的双重图

时间:2014-03-18 07:25:15

标签: python plot mainwindow

我已经设法在使用QtDesigner创建的应用程序的mainWindow中绘制了一个多条形图,我遇到的问题是每次我尝试绘制时我都有两个相同的图形,一个在应用程序内部(其中一个)是我想要的,但另一个在一个独立的窗口(我不想显示)。

对此有何帮助?这是我用来在mainWindow中生成绘图的代码:

这里创建任何情节的方法:

import numpy as np
import matplotlib.pyplot as plt

def drawPlot(x,y, y_O):

    n_groups = len(x)
    fig, ax = plt.subplots()
    index = np.arange(n_groups)
    bar_width = 0.35
    opacity = 0.4
    error_config = {'ecolor': '0.3'}
    rects1 = plt.bar(x, y, bar_width, alpha=opacity, color='b',label='label1')

    for i in range(len(x)):
        x[i] = x[i] + bar_width

    rects2 = plt.bar(x , y_O, bar_width, alpha=opacity, color='r',label='label2')

    plt.xlabel('Reading')
    plt.ylabel('Value (%)')

    plt.xticks(index + bar_width , (x))
    plt.legend()

    plt.tight_layout()

    return fig

这里是mainWindow代码的一部分,我尝试将生成的绘图包含在专用空间中:

....
....
thePlot = tm.drawPlot(x,y,y_O)
MyCanvas = FigureCanvas(thePlot)
self.ui.horizontalLayoutGraph2_2.addWidget(MyCanvas)
...
...

正如我所说,我得到两个相同的图,一个在horizo​​ntalLayout(OK)内,一个弹出独立窗口中的相同图(不好)

1 个答案:

答案 0 :(得分:1)

看看你的上一条评论,我发现:“关闭交互模式,只有在你准备好显示图表时才调用plt.show()”。由于您使用FigureCanvas显示情节,所以您需要在drawPlot方法的开头添加一行(在这种情况下,您最后不需要plt.close()

import matplotlib.pyplot as plt

def drawPlot(x,y, y_O):
    # Turn interactive plotting off
    plt.ioff()
    ....

我希望这会有所帮助