本学期的有机实验终于过去,终于可以好好鼓捣一下python能大显身手的实验 了,前面几个分析和生化实验也没啥好作图的,不过无机和物化里面用到线性拟合图像以及其他图像的地方还是非常多
总之,所有的”origin作图“,理论上全都可以用python代替,origin的优势在于拿起就能做,而python的优势在于一劳永逸
1. 引言
这个实验一共包括两处需要计算机作图的地方
- 电位分析法测定氯离子含量
- 可见分光光度法测定钴配合物吸收曲线和最大吸收光波长
2. 需求分析与要点解决
2.1 氯离子含量测定
在电位分析法测定氯离子含量中,需要得到一个这样的科研图像
- 线性拟合标准曲线
- 从线性拟合标准曲线上找出样品电位所在的位置,并得到对应的氯离子浓度
第一点在往期的推送以及我的experment_kit项目中有很多例子,一些拟合方法啥的大家可以回顾一下往期的例子,包括:
experiment_kit项目:https://github.com/ff6757442/experiment_kit
第二点我也是近期才想到的解决办法,其实也不复杂,我们以往的曲线拟合都是得到y对x的方程,从x去求y,而这个的要求是从y求x,所以只需要再拟合一次就好了,即以y为自变量对x拟合得到一个方程,再去由y得到x就可以了。并且这个样品点的标注可以由pyplot.annotate()方法完成,片段代码如下:
# 线性拟合
P_linear, R2 = linear(x1, y1)
P_reverse, R2_2 = linear(y1, x1)
xx = np.linspace(np.min(x1), np.max(x1), 50)
yy = np.polyval(P_linear, xx)
# 样品点求取
y_sample = 127 # 样品电位值
x_sample = np.polyval(P_reverse,y_sample) # 样品氯离子含量
# 在图中标出样品点
test_point = np.array([x_sample,y_sample])
test_txt_point = test_point+np.array([-0.2, -20])
msg_test = f'样品:E={y_sample}mV, pCl={x_sample:.3f}'
plt.plot(test_point[0],test_point[1],'p', markersize=15, color='purple')
plt.annotate(msg_test, xy=test_point, xytext=test_txt_point,
arrowprops=dict(facecolor='black',width=0.05,shrink=0.02))
此片段中的linear函数是我打包了的一个简化套装,基于statsmodels.api和numpy,它的具体片段可以参考我的往期文章和experiment_kit项目。再加上其他必要片段,可得到完整代码:(见后)