1

Python 3 を使用して、実験のデータを分析しています。そのために、load メソッドと fit メソッドを使用して Data クラスを作成しました。達成したいことは、両方のメソッドで属性 Data.figure を定義 (または再定義) し、実行後にその属性にアクセスして、図をプロットします。

したがって、これらのメソッドの実行中にプロットを作成する方法がわかりませんが、この作成中には表示されませんが、その後、図の属性にアクセスしているときにコマンドで表示されます。

私のコード(動作していません)の簡略化は次のようになります

import numpy as np
import matplotlib.pyplot as plt
from scipy.optimize import curve_fit

def expo(x, A, inv_tau):
    return A * np.exp(-inv_tau * x)

class Data:

    def load(self, file_name, parameter, bins=50):
        """Data loading"""

        self.file_name = file_name
        self.parameter = parameter
        dt = np.dtype([(self.parameter, '<f4'), ('molecules', '<f4')])
        self.table = np.fromfile(file_name, dtype=dt)

        # HISTOGRAM CONSTRUCTION
        self.mean = np.mean(self.table[self.parameter])
        self.hist, bin_edges = np.histogram(self.table[self.parameter],
                                            bins=bins,
                                            range=(0, bins * self.mean / 10))
        self.bin_centres = (bin_edges[:-1] + bin_edges[1:]) / 2
        self.bin_width = bin_edges[1] - bin_edges[0]

    def plot(self):
        """Data plotting"""

        # PLOT THE HISTOGRAM
        fig = plt.figure()
        plt.bar(self.bin_centres, self.hist, self.bin_width)
        self.figure = fig

    def fit(self, fit_start=0):
        """Histogram fitting"""

        self.fit_guess = [self.hist[0], 1 / self.mean]
        self.fit_par, self.fit_var = curve_fit(expo,
                                               self.bin_centres[fit_start:-1],
                                               self.hist[fit_start:-1],
                                               p0=self.fit_guess)
        self.tau = 1 / self.fit_par[1]

        # PLOT
        fig = plt.figure()
        hist_fit = expo(self.bin_centres, *self.fit_par)
        plt.bar(self.bin_centres, self.hist, self.bin_width)
        plt.plot(self.bin_centres[fit_start:-1], hist_fit[fit_start:-1])
        self.figure = fig

if __name__ == "__main__":

    data1.load(os.path.join(dirname, file_list[i]))
    data1.fit()
    print(data1.tau)

    data1.figure

このコードには、望ましくない結果が 2 つあります。fit メソッドはプロット図を返します (これは望ましくありません)。最後の行 'data1.figure' は結果としてプロットを取得せず、何もしません。

私は何を間違っていますか?

そして、問題の解決とは別に、私が望むことを行うためのより良いアプローチがあると思いますか?

ありがとう!

4

1 に答える 1