陈天舒
FOQAT 2.0.0 版本大更新
2022-1-19 20:04
阅读:1361
FOQAT是一个快速处理和分析大气外场观测数据和空气质量数据的R包。


本文同步发表于我的公众号 Magic Air Code


#项目主页:yuque.com/foqat


2.0.0版本是FOQAT的大更新版本,增加了基于ggplot2语法的绘图模块,增加了一些其他的新功能,优化了一些原有功能。新版本已经在Github上发布,CRAN审核中。请先安装Github上的最新版本并载入:


#从Github安装开发版#安装官方包‘remotes’install.packages("remotes")
#调用其中的‘install_github’函数从Github安装本包
remotes::install_github("tianshu129/foqat")
#载入包library(foqat)


以下演示新功能。

新增绘图模块,包括:


geom_ts:快速绘制时间序列,支持点、线、面积、柱状。以下代码绘制绘制氮氧化物面积图和臭氧折线图在同一个图中,分列左右y轴(为展示效果,对数据稍做处理):


#产生数据
aqi2=aqi
aqi2$NO[aqi2$NO>7]=NA
aqi2$NO2=aqi2$NO2*0.3
#绘图
geom_ts(df=aqi2, yl=c(3,2), yr=6, alist=c(3,2), llist=6)


1.png


#可以添加参数美化:
geom_ts(
df=aqi2, 
yl=c(3,2), yr=6, 
alist=c(3,2), llist=6, 
alab=list(bquote(NO[2]~" "), 
bquote(NO~" ")),llab=list(bquote(O[3]~" ")),
yllab=bquote(NO[x]~" "~(ppbv)),
yrlab=bquote(O[3]~" "~(ppbv)),
lcc="#ff4d4f", 
aff=c("#096dd9","#69c0ff"),
xlab="Datetime"
)


2.png


geom_ts_batch:批量绘制时间序列。以下批量绘制时间序列:


#绘图
geom_ts_batch(aqi)


3.png


#美化
xlab2=bquote(Time~"")
ylab2=list(bquote(NO~" "~(ppbv)), bquote(NO[2]~" "~(ppbv)), bquote(CO~" "~(ppmv)), bquote(SO[2]~" "~(ppbv)), bquote(O[3]~" "~(ppbv)))
cclist=c("#eb2f96", "#1890ff", "#52c41a", "#faad14", "#f5222d")
geom_ts_batch(aqi, xlab=xlab2, ylab=ylab2, cclist=cclist, bquote=TRUE)


4.png



geom_avri快速绘制平均变化。以下绘制平均变化:


#产生数据
x=avri(aqi, bkip = "1 hour", mode = "recipes", value = "day", st = "2017-05-01 00:00:00")
#绘图
geom_avri(x,cave=6,csd=11)


5.png

#美化
geom_avri(
x,
cave=6,
csd=11,
alpha=0.5,
lcc="#0050b3",
rff="#40a9ff", 
xlab="Hour of day",
ylab=bquote(O[3]~" "~(ppbv))
)


6.png

geom_avri_batch:批量绘制平均变化。以下批量绘制平均变化:


#生成数据
x=avri(aqi, bkip = "1 hour", mode = "recipes", value = "day", st = "2017-05-01 00:00:00")
#绘图
geom_avri_batch(x)


7.png


#美化
lcc=c("#f5222d","#fa8c16","#52c41a","#1890ff","#722ed1")
rff=c("#ff7875","#ffc069","#95de64","#69c0ff","#b37feb")
xlab1=list(bquote(Time~""),bquote(Time~""),bquote(Time~""), bquote(Time~""),bquote(Time~""))
ylab1=list(bquote(NO~" "~(ppbv)), bquote(NO[2]~" "~(ppbv)), bquote(CO~" "~(ppmv)), bquote(SO[2]~" "~(ppbv)), bquote(O[3]~" "~(ppbv)))
geom_avri_batch(x, alpha=0.6, xlab=xlab1, ylab=ylab1, lcc=lcc, rff=rff, bquote=TRUE)

8.png


geom_tsw快速绘制风时间序列。以下代码绘制风时间序列:

#产生数据
df=trs(met, bkip="5 mins")
#绘图
geom_tsw(df, coliws=4, coliwd=5)


9.png

avri函数计算平均变化的结果在一张表中。例如3个物种的时间序列。计算结果的第1列为时间或者序号,第2列到第4列为平均值,第5列到7列为方差。计算结果可选采用科学计数法表示。计算结果为数值型,可以直接导入其他计算,或者采用geom_avri_batch画图。以下代码计算aqi数据的小时分辨率下的平均日变化和方差:


x=avri(aqi, bkip="1 hour")View(x)


trs函数增加了参数fun,可选择用于重采样的函数,例如计算新分辨率下每个时间段的最大值。以下代码计算每天的最大值:


x=trs(aqi, bkip="1 day", fun="max")
View(x)


新增prop函数,一键把时间序列转化为占比时间序列,即每个时刻每个物种对该时刻总和的贡献。可选只计算完整case。以下代码一键把VOC时间序列转化为VOC占比时间序列:


x=prop(voc)
View(x)  
#可视化:
geom_ts(x, yl=c(2:6), alist=c(2:6))


10.png


statdf函数计算结果中去除时间列,可通过设置参数prop直接计算占比并进行统计。例如计算每个时刻每个VOC物种在总浓度中的占比,并进行统计。以下代码对VOC时间序列中各个物种的占比情况一键统计:


x=statdf(voc, prop=TRUE, n=3)
View(x)


11.png


新增svri函数,可选择特定函数来计算平均态变化。以下代码计算小时平均下,每个小时的最大值(例如所有0点至23点中分别计算最大值):


x=svri(aqi, bkip="1 hour", fun="max") 
View(x)


新增dm8n_batch函数,一键批量计算多站点(城市)八小时臭氧均值。以下代码构建3列臭氧浓度,并进行批量计算:


#生成数据
aqi2=aqi[c(1,6)]
aqi2$O32=aqi2$O3*runif(1)
aqi2$O33=aqi2$O3*runif(1)
#计算
x=dm8n_batch(aqi2)
#时差调整
x$date=as.POSIXct(x$date)-3600*8
#可视化
geom_ts(x, yl=c(2:4), llist=c(2:4), xlab="Date")


12.png


loh\ofp\vocct函数结果中增加了统计页,包含:方差、分位数、最大值、最小值。可选择是否单独列出BVOC。以下代码以vocct函数为例:


x=vocct(voc)View(x[["Con_ppbv_stat"]])


13.png


其他更新:更新了VOC数据库,优化了匹配。

转载本文请联系原作者获取授权,同时请注明本文来自陈天舒科学网博客。

链接地址:https://wap.sciencenet.cn/blog-3474899-1321754.html?mobile=1

收藏

分享到:

上一篇
下一篇
当前推荐数:0
推荐到博客首页
网友评论0 条评论
确定删除指定的回复吗?
确定删除本博文吗?