Python关于matplotlib.pyplot和numpy的使用:绘制散点图及进行线性拟合

目的:绘制出照射量率与计数率的关系,并进行拟合

 excel效果:

打开文件并读取数据

x是横坐标对应照射量率,y和z是纵坐标分别对应计数率和净计数率

import matplotlib.pyplot as plt
import openpyxl
import numpy
wb=openpyxl.load_workbook("测试1.xlsx")
ws=wb.active
print(ws)
b=ws['B1':'K1']#能访问B1到K1这一行,但返回的是元组类型,且不能使用.value
b=list(b)#读取B1到K1的数据
b=b[0]
x=[]
for i in b:
    x.append(i.value)
print("x=",x)

c=ws['B4':'K4']
c=list(c)
c=c[0]
y=[]
for i in c:
    y.append(i.value)
print("y=",y)

jc=ws['B3':'K3']
jc=list(jc)
jc=jc[0]
z=[]
for i in jc:
    z.append(i.value)
print("z=",z)
<Worksheet "sh2">
x= [933.33, 830.67, 727.1, 625.33, 522.67, 420, 317.33, 214.67, 112, 9.33]
y= [2585.883333333333, 2198.4333333333334, 1980.7, 1720.176666666667, 1499.93, 1167.6466666666665, 933.0066666666667, 633.72, 372.5233333333333, 88.33333333333333]
z= [2531.4866666666667, 2144.036666666667, 1926.3033333333333, 1665.7800000000002, 1445.5333333333333, 1113.2499999999998, 878.61, 579.3233333333334, 318.12666666666667, 33.93666666666666]

使用numpy.polyfit()获取最小二乘拟合的系数

deg=1表示拟合次数为1,numpy.polyfit()返回的值是列表

根据降幂顺序给出系数值

p=numpy.polyfit(x,y,deg=1)
print("p是",p)
p是 [ 2.63872931 74.55261783]

将拟合曲线的值存入y1中,y1就是根据y(计数率)的拟合线性值

a1=p[0]
a2=p[1]
y1=[]
for i in x:
    y1.append(a1*i+a2)
print("y1=",y1)
y1= [2537.3578432844147, 2266.465892479527, 1993.172698003956, 1724.629216283584, 1453.7372654786961, 1182.8189273807243, 911.9005892827524, 641.008638477865, 370.0903003798931, 99.17196228192121]

同样操作,得到y2,y2是根据z(净计数率)的拟合线性值

p1=numpy.polyfit(x,z,deg=1)
print("p1是",p1)
b1=p1[0]
b2=p1[1]
y2=[]
for i in x:
    y2.append(b1*i+b2)
print("y2=",y2)
p1是 [ 2.63872931 20.15595117]
y2= [2482.9611766177486, 2212.069225812861, 1938.7760313372896, 1670.2325496169174, 1399.3405988120296, 1128.4222607140578, 857.5039226160858, 586.6119718111981, 315.6936337132262, 44.77529561525421]

绘制曲线

使用plt.plot()绘制拟合线,使用plt.scatter()绘制散点图

多次绘制可在同一张图进行绘制

plt.scatter(x,y,c='b')中,x,y是要输入的横纵坐标,要以列表类型输入;c是可选的绘制曲线样式

plt.plot(x,y,'b--')中,x,y是要输入的横纵坐标,要以列表类型输入;'b--'中"b"是颜色,"--"是形状

plt.scatter(x,y,c='b')#绘制散点图
plt.plot(x,y1,'b--')
plt.scatter(x,z,c='r')
plt.plot(x,y2,'r--')
plt.show()

  • 0
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值