还是用matplotlib来做图,上源代码,可以直接用(改原始数据时记得改标注)
import numpy as np
import matplotlib.pyplot as plt
# 原始数据
U = [137, 192, 137, 211, 160, 180, 136, 122, 200, 134]
y1 = [8.60, 8.91, 8.57]
y2 = [20.61, 19.68, 19.96]
y3 = [16.97, 16.78, 16.89]
y4 = [33.51, 32.69, 33.10]
y5 = [6.74, 6.97, 6.77]
y6 = [16.37, 16.32, 16.33]
y7 = [14.42, 14.35, 14.39]
y8 = [4.50, 4.56, 4.55]
y9 = [5.74, 5.69, 5.71]
y10 = [7.46, 7.23, 7.38]
y = [y1, y2, y3, y4, y5, y6, y7, y8, y9, y10]
rou = 983.5
g = 9.797
n = 1.83*10**-5
b = 6.17*10**-6
p = 76
d = 5*10**-3
l = 5*0.25*10**-3
# 代入公式
def f(t, u):
s = 0.0
for i in t:
s += i
t_a = s/len(t)
v = l / t_a
r = (9 * n * v / 2 * rou * g) ** (1 / 2)
q = (18*np.pi / (2*rou*g)**(1/2) ) * (n*l / t_a*(1 + b/p*r) )**(3/2) * (d / u)
return round(q, 22)
Q = []
for i in range(10):
Q.append(f(y[i], U[i]))
print(Q)
Q.pop(7)
Q.pop(7)
Q1 = Q
print("剔除第8,第9组数据")
Q.sort()
print(Q)
x = [1, 2, 3, 4, 5, 11, 14, 15]
# 作图
plt.style.use('grayscale')
plt.figure(figsize=(10, 6))
ax1 = plt.subplot(111)
plt.grid(True)
plt.xlim(0, 17)
plt.xticks(np.linspace(0, 17, 18))
values = ['n4', 'n2', 'n6', 'n3', 'n7', 'n1', 'n5', 'n10']
for i in range(len(x)):
plt.text(x=x[i], y=0.15e-19, s=values[i])
plt.ylim(0, 3e-18)
plt.yticks(Q)
plt.twinx()
plt.ylim(0, 3e-18)
plt.yticks(Q1, ['q4', 'q2', 'q6', 'q3', 'q7', 'q1', 'q5', 'q10'])
plt.plot([0, 17], [0, 17*Q[0]], 'b')
plt.scatter(x, Q, s=8)
plt.show()
# 数据处理
e = []
s = 0.0
for i in range(len(x)):
e.append(round(Q[i]/x[i], 22))
s += round(Q[i]/x[i], 22)
av = round(s/len(e), 22)
print('e = {}'.format(e))
print("e(average) = {}".format(av))
d = (av - 1.602e-19)/1.602e-19
print("相对误差:{}%".format(round(d*100), 5))
# 计算标准差
values = e
n = len(values)
av = np.average(values)
sqd = 0.0
for i in values:
sqd += (i - av) ** 2
Ua = np.sqrt(sqd / (n*(n-1)))
print("n = {}\nS = {}".format(n, Ua))
运行结果
作图结果