1

QtDesigner で作成したアプリケーションの mainWindow にマルチバー プロットをプロットすることができました。問題は、プロットしようとするたびに、アプリケーション内に 1 つの 2 つの同一のグラフが表示されることです (これは私が考えているものです)。したい)だけでなく、独立したウィンドウ(表示したくない)上の別のものもあります。

これについて何か助けはありますか?? 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)
...
...

私が言ったように、私は2つの同一のプロットを取得しています.1つは水平レイアウト内(OK)で、同じプロットはポップアップ独立ウィンドウ(OKではありません)にあります。

4

1 に答える 1

1

あなたの最後のコメントを見ると、「インタラクティブモードをオフにし、プロットを表示する準備ができたときにのみ plt.show() を呼び出す」ことがわかりました。プロットを表示するためFigureCanvasに必要なことは、メソッドの先頭に 1 行を追加することだけですdrawPlot(その場合plt.close()、最後にさえ必要ありません)。

import matplotlib.pyplot as plt

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

これが役立つことを願っています

于 2014-04-02T07:49:44.617 に答える