论文中常见的拟合散点验证图(R语言版)

如上图所示,是论文中常见的validation图,python也能实现相似的图绘。

今天先介绍R语言版,python改期再介绍吧

这张图需要依次实现下列功能:

  • data实测与data模拟的散点绘制
  • R方、RMSE、Bias等参量计算与绘制
  • 拟合后的直线与y=x直线
  • 网格线(如果需要)

使用base R的功能一步一步计算:

为了实现多个因变量和一个自变量在同一个图片里,我们要用points或者lines函数画其他因变量和自变量的值几点注意:

  • 画图的时候,明明设置了X轴Y轴的范围,为什么坐标轴的长度还是会多出一块呢?看下图:

这里用到了xaxs和yaxs,可以使x,y轴从0开始

直接上代码

# 数据读取
library(readxl)
library(stringr)
library(data.table)
DE_Hai <- read_excel("D:/acad3_211001/data/DE-Hai.xlsx", sheet = "DE-Hai")
Qsim <- DE_Hai$Gc; Qobs <- DE_Hai$Gc1

Qsim为模拟的数据,Qobs为观测的数据,自行读取

再手动写一下求RMSE等参数的函数:

{r}
NSE <- function(Qsim, Qobs){# exclude NAdata <- data.table(Qsim, Qobs)data <- na.omit(data)Qsim <- data$QsimQobs <- data$Qobs# computeQobs_mean <- mean(Qobs)Emod <- sum((Qsim - Qobs)^2)Eref <- sum((Qobs - Qobs_mean)^2)if (Emod == 0 & Eref == 0) {NSE <- 0} else {NSE <- (1 - Emod / Eref)}NSE
}
RMSE <- function(Qsim, Qobs){# exclude NAdata <- data.table(Qsim, Qobs)data <- na.omit(data)Qsim <- data$QsimQobs <- data$Qobssqrt(mean((Qsim - Qobs)^2))
}
Bias <- function(Qsim, Qobs){# exclude NAdata <- data.table(Qsim, Qobs)data <- na.omit(data)Qsim <- data$QsimQobs <- data$Qobs# BIASsumQobs <- sum(Qobs)sumQsim <- sum(Qsim)if (sumQobs == 0) {BIAS <- 0} else {BIAS <- (sumQsim - sumQobs) / sumQobs}BIAS
}

接下来是核心部分:

# line plot
plot(x=Qsim, y=Qobs,col=rgb(0.4,0.4,0.8,0.6),pch=16, cex=1.3,xlab="Gc by PML", ylab="Gc by LE",xlim=c(0,0.01) , ylim=c(0,0.01), yaxs="i",xaxs="i")
grid(nx=5,ny=5,lwd=1,lty=2,col=rgb(0.4,0.4,0.8,0.2))line.model <- lm(Qobs~Qsim)
k <- as.numeric(line.model$coefficients[2])
b <- as.numeric(line.model$coefficients[1])
p <- (summary(line.model))$coef[2,4]lines(seq(-0.001,0.011,length=100), k * seq(-0.001,0.011,length=100) + b, col='#c27ba0', lwd=2)lines(seq(-0.001,0.011,length=100), seq(-0.001,0.011,length=100), col="#3c78d8", lwd=2)
text(0.007, 0.002, str_sub(paste('NSE=',NSE(Qsim, Qobs), sep=' '),1, 10))
text(0.009, 0.002, str_sub(paste('R^2=',R2 = cor(Qsim, Qobs, use = "complete")^2, sep=' '),1, 9))
text(0.007, 0.001, str_sub(paste('RMSE=',RMSE(Qsim, Qobs),sep=' '),1, 12))
text(0.009, 0.001, str_sub(paste('bias=',Bias(Qsim, Qobs), sep=' '),1, 12))
text(0.007, 0.004, str_sub(paste('k=', k, sep=' '), 1, 8))
text(0.009, 0.004, 'p < 0.05')
  • grid用于添加格网线,更美观
  • lm用于线性拟合
  • lines函数是在已有图绘上增加内容
  • paste和str_sub用于连接和截取字符串,来自于stringr包

结果如图:

论文中常见的拟合散点验证图(R语言版)相关推荐

  1. python画笔的尺寸_Matplotlib 常用画图命令总结:使用 Python 在论文中画出一手漂亮的数据图...

    介绍 本文不是一篇详尽的.从简到繁的 Maplotlib 画图教程,而是用各种例子快速直观地让读者上手 Matplotlib 画图中的一些常用的.基础的操作.本文不对各种数据图(折线图.柱状图等)作介 ...

  2. r读取shape文件可视化_R语言读取空间数据以及ArcGIS中OLS工具回归结果可视化R语言版...

    前面已经介绍过R语言读取excel的方法了,当然读取数据来说,个人还是推荐csv或txt存储(针对小数据量).大数据量的数据的话建议还是用数据库,此外也可以考虑data.table包读取,这个包也是个 ...

  3. 论文中常见的制表位的用法——公式居中,编号右对齐

    论文中经常会插入很多公式,并在公式末尾为公式编号.要求的格式是公式居中,编号靠右.平时我们常采用文档靠右或者加空格的方式制作.这样一来会出现很多空格字符,为论文基数带来很大不便. 下面使用制表位的方法 ...

  4. R语言绘制SCI论文中常见的箱线散点图,并自动进行方差分析计算显著性水平

    显著性标记箱线散点图 本篇笔记的内容是在R语言中利用ggplot2,ggsignif,ggsci,ggpubr等包制作箱线散点图,并计算指定变量之间的显著性水平,对不同分组进行特异性标记,最终效果如下 ...

  5. 方差分析中怎么看有无显著性影响_用R语言做单因素方差分析及多重比较

    SPSS方差分析的应用已经做得非常好了,绝大多数的方差分析问题均可通过SPSS"点菜单"的方式得以解决,R语言在统计和可视化方面有自己的特色,我们不妨来对比着学习.选用R语言自带案 ...

  6. rmd中无法打开链结r_从零开始入门R语言—Rstudio下载与安装

    注意:在安装Rstudio之前一定要现状R软件. 安装方法: QQ ZHOU:从零开始入门R语言-软件下载及安装​zhuanlan.zhihu.com 一.下载安装RStudio 上节我们已经下载了R ...

  7. Markdown编辑论文中常见公式符号(持续更新)

    文章目录 1.幂次方 2.公式下角标 3.希腊字母 4.运算符 5.空格,大空格 6.集合 7.极限 8.分支公式(大括号) 9.中括号矩阵 10.分数 11.取整符号 12.公式中加粗 13.偏导数 ...

  8. 学术论文中常见的英文简写

    1:A.D. 拉丁文:anno Domini 释义:in the year of the Lord 耶稣纪年,公元 2:a.m. 拉丁文:Ante Meridiem 释义:before middday ...

  9. 英文论文中常见拉丁语/英语缩写整理

    1:A.D. 拉丁文:anno Domini 释义:in the year of the Lord 耶稣纪年,公元 2:a.m. 拉丁文:Ante Meridiem 释义:before middday ...

最新文章

  1. 中国移动宽带业务怎么样?和电信的比有什么不同?
  2. Js + Css的msn式的popup提示窗口的实现
  3. Windows XP Professional系统修复的操作方法
  4. linux删除libc.so.6
  5. JavaWeb黑马旅游网-学习笔记01【准备工作】
  6. 《天涯明月刀》窦德斌:美术需要突破自我的局限
  7. 在django中使用celery
  8. Java编程中值得注意的对象引用现象
  9. Apt-get使用指南
  10. CWinThread
  11. 【opencv】错误提示OpenCV Error: Assertion failed
  12. 启动失败java.lang_关于jeesite启动失败的问题java.lang.UnsupportedClassVersionError
  13. OverflowError: Python int too large to convert to C long
  14. 课程设计matlab仿真,MATLAB与仿真系统课程设计报告
  15. 实用工具系列 - Xshell安装下载与使用
  16. STVP提示The device is protected解决方法
  17. 孔雀东南飞用mysql存储_【原】一个真实的故事,现实版的《孔雀东南飞》
  18. SQL(进阶实战05)
  19. 印象笔记目录导出(失败)
  20. i.MX6ULL系统移植 | 移植NXP官方linux4.1.15内核

热门文章

  1. 人工智能ai内容阅读_用人工智能打击非法内容
  2. 我要玩石器多开的攻与防和外挂 ②
  3. XEE漏洞基础以及进阶
  4. 别说你只看到庞大的中国来客,CES仍在预言2018年AI加持下的科技圈走势
  5. 如何才能简单、快速地提取图片中的文字?
  6. 一文带你了解贷款的还款方式,总有一款适合你!
  7. 【文件】2014年国家助学贷款有关工作的通知
  8. c语言实现数字竞猜游戏
  9. Zabbix:Processor load is too high on Zabbix server
  10. AirPlay视频认证测试用例