作者:李誉辉
四川大学在读研究生
简介:
笔者在学术生涯中,经常遇到谱线的处理,如DSC,XRD,FIR的谱线。
传统的做法是使用Origin软件进行处理,但是Origin的配色不够赏心悦目。
而且对于批量数据的处理,实在是繁琐。恰巧学了R可视化,于是果断抛弃Origin。
本次教程,将着重介绍谱线的处理,包括基线拟合和扣除,峰的填充,峰面积计算。
还有峰值标定,让你的谱线耳目一新,在这个看脸的时代,图好文一半。
看完本次教程,希望各位看官点个好看,祝大家科研顺利,多发Paper。
本次教程主要涉及到的包:ggplot2
,dplyr
,ggpmisc
,quantmod
,purr
,magrittr
,basicTrendline
。
1 数据预处理
这里笔者以以前的DSC数据为例。
DSC数据,时间变量Time
单位是分钟,通过时间来初步截取数据,
横坐标对应的变量是Sample Temperature
,
纵坐标对应的变量是Unsubtracted Heat Flow
。
1.1 数据截取
绘图:
1.2 数据标准化
根据时间筛选升温阶段的数据, 再舍弃两头波动较大的数据。
绘图:
1.3 标记峰/谷
使用ggpmisc
出来很多峰,有重影。故使用quantmod
包中的 先找峰,再找谷。根据范围对峰/谷进行筛选,如果是总体下降型曲线,则先找谷,再找峰。
所谓找峰,找谷,就是根据curve的特点,找到特定波峰,波谷的位置。
S_temp <dbl> | Heat_flow <dbl> | group <chr> |
---|---|---|
166.591 | 46.86436 | B1 |
167.045 | 49.37465 | B2 |
165.958 | 36.18742 | B3 |
164.004 | 45.39948 | B4 |
163.825 | 34.58791 | B5 |
S_temp <dbl> | Heat_flow <dbl> | group <chr> |
---|---|---|
172.729 | 41.40188 | B1 |
173.362 | 40.57349 | B2 |
172.645 | 28.26953 | B3 |
170.629 | 38.66760 | B4 |
170.995 | 28.36577 | B5 |
绘图:
1.4 基线扣除
许多表征手段中,为了只显示数据的波动情况,
都涉及到基线的拟合,然后扣除基线,
这样就排除了其它无关因素的干扰。
基线拟合要根据基线的特定来确定拟合的模型。
这里我们发现该curve的波峰两端似乎近似成一条直线,或曲率较小的二次函数。
波峰的起始位置大概从130开始。波峰的结束位置靠近于波谷谷点。
绘图:
1.5 单位质量化
很多时候,curve峰值大小与样品的浓度或质量相关。
这时候,就需要对curve进行单位质量处理。
原理就是curve的纵坐标值除以样品的有效质量或浓度。
绘图:
1.6 线条分离
上述图形,线条重合比较多,为了便于观看,依次将各个curve的纵坐标向上偏移若干个单位。
偏移量需要手动调整,一次次尝试,这里笔者仅仅展示尝试最终的结果。
绘图:
1.7 更新峰尖坐标和波谷坐标
应该刚刚经过基线处理,单位质量处理,线条分离等操作,峰尖和波谷坐标已经发生了变化。
但是横坐标没有变化,只需要更新纵坐标。
2 视觉增强
2.1 主题美化
采用SCi常见的要求,4个坐标轴线条,因为进行了线条分离,纵坐标的刻度文本已经没有必要了。 所以隐藏纵坐标刻度文本。如果读者的paper有其它要求,也可以自定义。
2.2 输出到PPT
使用export
包可以输出到office, 输出新式为office文件,可以使用追加选项。
输出后,通过取消组合,就能用矢量化修改元素。
但是文字的输出,有些别扭。
2.3 峰面积可视化
峰面积可视化,首先要对峰的基线进行拟合,注意区分,不是curve的基线。
这样就能将峰围成一个多边形区域,进行多边形区域颜色填充和面积计算。
2.3.1 拟合峰baseline
峰的基线拟合,可以有2种方式,一是对峰两侧的curve进行拟合,
根据拟合方程,求出峰的横坐标对应的纵坐标。
而是从峰的起点和结束点画一条直线,根据2点确定一条直线的原理确定峰的基线。
笔者这里仅仅输出第一种方法,第二种仅给出代码。
2点确定一条直线: (牛顿差商公式)。
2.3.2 峰面积计算
这里我们采用rgeos
包进行峰面积计算,如果读者有其它的方式,也可以采用,欢迎留言。
刚刚已经计算得到面积了,现在还需要将面积和峰尖坐标融合, 以用geom_text()
进行标记。
S_temp <dbl> | Heat_flow <dbl> | group <chr> | area <dbl> |
---|---|---|---|
166.6 | 1.243640 | B1 | 14.2 |
167.0 | 2.787298 | B2 | 14.8 |
166.0 | 4.300952 | B3 | 14.8 |
164.0 | 5.853463 | B4 | 14.7 |
163.8 | 7.391237 | B5 | 15.4 |
S_temp <dbl> | Heat_flow <dbl> | group <chr> |
---|---|---|
130.004 | 0.02355421 | B1 |
130.025 | 0.02345703 | B1 |
130.037 | 0.02361300 | B1 |
130.058 | 0.02349546 | B1 |
130.075 | 0.02342725 | B1 |
130.091 | 0.02349322 | B1 |
绘图:
## png
## 2
2.3.3 geom_polygon
峰填充
峰面积可视化的介绍就告一段落,接下来介绍ppmisc
包,
里面有一些非常有用的函数,谱线处理非常方便。
3 ggpmisc
包_峰情万种
ggpmisc
可以对数据点进行拟合,并返回函数模型,模型参数。
可以多种方式标记峰,标记谷。使用方法比较简单,这里仅仅简单介绍。
详细的可以点开后面的参考来源。
当然最关键的是ggpmisc
与ggplot2
的结合非常方便。
3.1 stat_peaks
与stat_valleys
标记峰/谷
前面的DSC数据之所以不用ggpmisc
标记峰/谷,是因为存在很多肉眼看不见的小峰。
3.2 stat_poly_eq
多项式拟合
首先编造数据:
3.3 stat_fit_tb
添加模型参数表
3.4 stat_fit_deviations
残差拟合
前面的拟合图形都没有展示残差分布,stat_fit_deviations
可以用棒棒糖的形式展示残差。
参考来源:
摄氏度解析
坐标轴符号解析
R Integrate Peaks
Shaded area under two curves using R
ggpmisc教程
ggpmisc标记峰
计算面积
求2条曲线的交点
——————————————
往期精彩: