我在log-log图上使用matplotlib绘制了这个data。我试图使用polyfit
以import matplotlib.pyplot as plt
import numpy as np
from scipy import *
with open("data.dat", "r") as f:
x = []
y = []
for line in f:
if not line.strip() or line.startswith('@') or line.startswith('#'):
continue
row = line.split()
x.append(float(row[0]))
y.append(float(row[1]))
x = np.asarray(x)
y = np.asarray(y)
plt.loglog(x, y, basex=10,basey=10, linestyle="none",marker=".",color='b',label="data")
x_fit= x[:5]
y_fit= 1/x_fit**4/10**6
plt.plot(x_fit,y_fit, label='should be like this',color='r')
m,b = np.polyfit(x_fit, y_fit, 1)
plt.plot(x_fit, m*x_fit+ b, linestyle='--', label='polyfit', color='g')
plt.legend()
plt.ylabel('Spectra ($\AA^2$)')
plt.xlabel('q ($\AA^{-1}$)')
plt.grid()
plt.show()
的直线拟合data(低q制度)的前5-6个点。我已经尝试过以前回答过question的解决方案。如果我试试,曲线甚至不会出现在我的情节上。
这是我的代码:
polyfit
修改
如果我在新文件中提取这些点并使用正常的x-y图绘制它。 {{1}}工作正常。
答案 0 :(得分:0)
你想要log10(y)= m * log(x)+ b
m,b = np.polyfit( np.log10(x[:5]), np.log10(y[:5]), 1)
根据您的红色曲线(y_fit = 1 / x_fit ** 4/10 ** 6),您可以手动找到:
m = -4, b = -6