2016-01-07 8 views
0

У меня есть pyqt5 виджетlmfit, result.plot_fit (ах) не черчения все 3 участков в PyQt

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 (ах = ах), это только участки столбец данных графика подходит. Не 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() 

, если я не использую (ах = ах) и только plot_fit(), а затем plt.show() это участки все три оси прекрасно, но это открывает новое окно. Я хочу, чтобы сюжет появился в моем виджетах внутри моей программы.

Внутри виджета с топором = ах Inside widget with plot_fit(ax=ax) Вне виджета с просто подходят Outside widget with plot_fit(); plt.show()

+0

Кроме того, если я печатаю result.best_fit, я все равно получаю массив, это не None или что-то еще. – Faller

ответ

1

Проблема в self.axes.hold(False) линии, которая очищает фигуру перед каждым вызовом plot и тому подобное. plot_fit последней строкой является «данные», поэтому все, что вы получаете, это строка данных.

Не используйте hold(False) в целом, мы думаем о его удалении от восходящего потока.

+0

Ну, я чувствую себя глупо, спасибо. – Faller

+0

@Faller Не потейте. Иногда он просто берет второй набор глаз, чтобы увидеть мелкие детали, которые являются неправильными. – tacaswell

 Смежные вопросы

  • Нет связанных вопросов^_^