0

私はpyqt5ウィジェットを持っています

class MPLibWidget(QtWidgets.QWidget):
"""
base MatPlotLib widget
"""
def __init__(self, parent=None):
    super(MPLibWidget, self).__init__(parent)

    self.figure = Figure()
    self.canvas = FigureCanvasQTAgg(self.figure)
    self.canvas.setParent(self)

    self.mpl_toolbar = NavigationToolbar2QT(self.canvas, self)

    self.canvas.mpl_connect('key_press_event', self.on_key_press)

    self.axes = self.figure.add_subplot(111)
    self.axes.hold(False)

result.plot_fit(ax=ax) を使用してフィットを使用しようとすると、プロット フィットのデータ列のみがプロットされます。init_fit または best_fit ではありません。

def fit(self, data, widget):
    self.layers = ['Air', 'BK7', 'SLG']
    wv = np.arange(400, 900)
    mod = lmfit.Model(self.get_R, ['wavelengths'], ['thickness', 'void_percent'])
    mod.set_param_hint('thickness', value=130, min=50, max=250)
    mod.set_param_hint('void_percent', value=.15, min=.05, max=.5)

    R = data.norm(wv)
    result = mod.fit(R, wavelengths=wv)

    RMSE = (sp.sum(result.residual**2)/(result.residual.size-2))**0.5
    bf_values = result.best_values
    bf_str = 'thk: ' + str(round(bf_values['thickness'])) + ", Void %: " + str(round(bf_values['void_percent']*100, 2))
    txt_spot = wv.min()-100 + (wv.max()-wv.min()) / 2

    ax = widget.figure.axes[0]
    result.plot_fit(ax=ax, datafmt='b+', initfmt='r--', fitfmt='g-')
    ax.text(txt_spot, .9, "RMSE: "+str(round(RMSE, 3)))
    ax.text(txt_spot, .85, bf_str)
    widget.canvas.draw()

(ax=ax) を使用せずに plot_fit() だけを使用すると、plt.show() を使用すると、3 つの軸すべてが正常にプロットされますが、新しいウィンドウが開きます。プログラム内のウィジェットにプロットを表示したい。

ax=ax の内側のウィジェット plot_fit(ax=ax) を使用したウィジェット内 ジャストフィットの外側のウィジェット ウィジェットの外に plot_fit();  plt.show()

4

1 に答える 1

1

self.axes.hold(False)などへの各呼び出し前の数字をクリアする行の問題plotplot_fitプロットされた最後の行は「データ」であるため、取得できるのはデータ行だけです。

一般には使用しないでくださいhold(False)。上流から削除することを考えています。

于 2016-01-08T03:57:53.087 に答える