从python绘制函数

时间:2014-03-18 10:39:24

标签: python python-3.x plot gnuplot

这是我最近的问题here的直接延续,已经解决了。 我在这里重新发布代码以及完整性:

import numpy as np
from scipy.optimize import curve_fit
xdata = np.array([0.1639534, 0.2411005, 0.3130353, 0.3788510,  0.4381247, 0.5373147, 0.6135673, 0.6716365, 0.7506711,  0.8000908, 0.9000000])
ydata =np.array ([7.1257999E-04,9.6610998E-04,1.1894000E-03,1.3777000E-03,1.5285000E-03,1.7297000E-03,1.8226000E-03,1.8422999E-03,1.7741000E-03,1.6574000E-03,1.1877000E-03])

def func (x,a,b,c):
    return a+b*x+c*x**3
popt, pcov =curve_fit(func,xdata,ydata,p0=(1,1,1))

with open('5fit','w') as outfile:
    outfile.write(' '.join(str(val) for val in popt))

现在,为了绘制这些数据,我使用gnuplot,因为:

gnuplot> a=-5.20906980e-05
gnuplot> b=4.41458412e-03
gnuplot> c=-3.65246935e-03
gnuplot> p a+b*x+c*x**3 w l 

我通常会按this来绘制函数或this来表示数据文件。 但现在,我需要使用a+b*x+c*x**3给出的数据绘制该函数(popt)。我还需要以pdf / png格式保存它们。

请帮助我这样做。

2 个答案:

答案 0 :(得分:2)

您可以使用以下代码绘制数据和拟合函数。我在顶部导入了matplotlib.pyplot(作为plt),并使用了两个简单的图表来显示数据。

import numpy as np
from scipy.optimize import curve_fit

import matplotlib.pyplot as plt

xdata = np.array([0.1639534, 0.2411005, 0.3130353, 0.3788510,  0.4381247, 0.5373147, 0.6135673, 0.6716365, 0.7506711,  0.8000908, 0.9000000])
ydata =np.array ([7.1257999E-04,9.6610998E-04,1.1894000E-03,1.3777000E-03,1.5285000E-03,1.7297000E-03,1.8226000E-03,1.8422999E-03,1.7741000E-03,1.6574000E-03,1.1877000E-03])

def func (x,a,b,c):
    return a+b*x+c*x**3
popt, pcov = curve_fit(func,xdata,ydata,p0=(1,1,1))

# Plot your original data
plt.plot(xdata, ydata, linestyle='None', marker='x', label='Data')
# Plot your fit using the xdata as x-values and func() to generate the y-values.
plt.plot(xdata, func(xdata, *popt), label='Fit')

plt.legend()

plt.show()

plt.savefig('image.png') # Save the figure.

func(xdata, *popt)的使用可以替换为func(xdata, popt[0], popt[1], popt[2]),但是实现相同目的的pythonic way越多。

如果您需要将其作为图像输出,

plt.savefig可用于保存当前图形。

答案 1 :(得分:1)

只是因为你提到了gnuplot:这是你如何使用gnuplot进行拟合和绘图:

将数据保存到文件data.txt

0.1639534 7.1257999E-04
0.2411005 9.6610998E-04
0.3130353 1.1894000E-03
0.3788510 1.3777000E-03
0.4381247 1.5285000E-03
0.5373147 1.7297000E-03
0.6135673 1.8226000E-03
0.6716365 1.8422999E-03
0.7506711 1.7741000E-03
0.8000908 1.6574000E-03
0.9000000 1.1877000E-03

并使用脚本:

set terminal pdfcairo
set output 'output.pdf'

f(x) = a+b*x+c*x**3
fit f(x) 'data.txt' via a,b,c
plot 'data.txt' with points, f(x) with lines
set output

版本4.6.3的结果是:

enter image description here