我正在使用 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
这段代码有两个不想要的结果:fit 方法返回一个绘图图(我不想要),最后一行“data1.figure”没有得到绘图,它什么也不做。
我究竟做错了什么?
并且独立于解决问题,你认为有更好的方法来做我想做的事吗?
谢谢!