跟着Nature正刊学作图:回归曲线+散点图

📋文章目录

  • 复现目标图片
  • 绘图前期准备
  • 绘制左侧回归线图
  • 绘制右侧散点图
  • 组合拼图 (关键步骤!)

   跟着「Nature」正刊学作图,今天挑战复现Nature文章中的一张组合图–左边为 回归曲线、右边为 散点图。这种组合图在展示相关性和分组效应时非常清晰有力。

复现目标图片

Nature原文组合图

图注:Nature原文中的组合图 (来源 https://www.nature.com/articles/s41586-021-03306-8)

复现图
图注:使用R ggplot2 + cowplot复现的效果

绘图前期准备

rm(list = ls())
setwd(dirname(rstudioapi::getActiveDocumentContext()$path))library(openxlsx);library(ggplot2);library(cowplot)data<- purrr::map(1:6, ~read.xlsx("data.xlsx", .x))
# 读取数据:6个子图的数据分别存储在data.xlsx的6个sheet中
data <- purrr::map(1:6, ~read.xlsx("data.xlsx", .x)) 
# <-- 补充说明开始 --> 
# 提示:如需练习数据,可通过文末方式联系获取。
# 这里用map循环读取,保证每个子图数据独立存储,便于后续清晰调用。
# <-- 补充说明结束 -->

绘制左侧回归线图

Lineplot<- ggplot(data[[1]], aes(Biomass*100, yi*100))+geom_point(aes(size = 1/vi, col = Treatment, fill = Treatment), alpha = 0.7)+#设置点的大小geom_line(aes(Biomass*100, yhat), data[[2]], col = "#F2B701", size = 0.8)+geom_ribbon(aes(x = Biomass*100, y = yhat, ymax = UCL, ymin = LCL),data[[2]], fill = "#F2B701", alpha = 0.1, size = 0.8)+#绘制置信区间geom_line(aes(Biomass*100, yhat), data[[3]], col = "#3969AC", size = 0.8)+#拟合曲线geom_ribbon(aes(x = Biomass*100, y = yhat, ymax = UCL, ymin = LCL),data[[3]], fill = "#3969AC", alpha = 0.1, size = 0.8)+scale_size(range = c(1, 6))+scale_color_manual(values = c("#F2B701","#3969AC"))+scale_fill_manual(values = c("#F2B701","#3969AC"))+geom_hline(yintercept = 0, lty=2, size = 1)+ geom_vline(xintercept = 0, lty=2, size = 1)+guides(size = "none")+theme_cowplot(font_size = 8)+#将字号设置为8theme(legend.position = c(0.5,0.7),legend.box = 'horizontal',legend.title = element_blank(),plot.margin = unit(c(5,5,5,5), "points"))+geom_text(aes(35, 60, label =(paste(expression("y = 0.1 - 0.17 x + 0.06 x"^2*", p = 0.3453")))),parse = TRUE, size = 3, color = "#3969AC")+#填入公式labs(x = expression(paste(CO[2], " effect on biomass carbon (%)")),y = expression(paste(CO[2], " effect on soil carbon (%)")))Lineplot

在这里插入图片描述

绘制右侧散点图

Myco<- ggplot(data[[4]], aes(Mycohiza, estimate*100, color = group, group = group))+geom_hline(yintercept = 0, lty = 2, size = 1)+ scale_color_manual(values = c("#11A579", "#F2B701"))+geom_pointrange(aes(ymin = ci.lb*100, ymax = ci.ub*100), position = position_dodge(width = 0), size = 0.8)+ theme_cowplot(font_size=8) +theme(legend.title = element_blank(),legend.direction = "horizontal",legend.position = c(0, 0.99))+labs(x = "",y = expression(paste(CO[2], " effect on carbon pools (%)")))Myco

在这里插入图片描述

Nutake<- ggplot(data[[5]], aes(Mycohiza, estimate*100)) + geom_hline(yintercept = 0, lty=2, size=1) + geom_pointrange(aes(ymin = ci.lb*100, ymax = ci.ub*100), size = 0.8, color = "#11A579")+theme_cowplot(font_size=8) +theme(legend.position = "none",axis.title.y = element_text(margin = margin(r=1)))+labs(x = "",y = expression(paste(CO[2]," effect on N-uptake (%)")))Nutake

在这里插入图片描述

MAOM<- ggplot(data[[6]], aes(Mycohiza, estimate*100))+ geom_hline(yintercept = 0, lty = 2, size = 1)+ geom_pointrange(aes(ymin = ci.lb*100, ymax = ci.ub*100),size = 0.8, color = "#F2B701")+theme_cowplot(font_size = 8) +theme(legend.position = "none",axis.title.y = element_text(margin = margin(r=1)))+labs(x = "",y = expression(paste(CO[2]," effect on MAOM (%)")))MAOM

在这里插入图片描述

组合拼图 (关键步骤!)

Right<- plot_grid(Nutake + theme(plot.margin = unit(c(5, 5, -10, 5), "points")),MAOM + theme(plot.margin = unit(c(0, 5, 5, 5), "points")),nrow = 2, labels = c("c","d"), align = "v", axis = "l",vjust = 1.2, hjust = 0.5, label_size = 10)#先拼接右侧上下两张图
Midrig<- plot_grid(Myco + theme(plot.margin = unit(c(5,5,5,0), "points")),Right,vjust = 1.2,axis = "b",labels = c("b",""), label_size = 10,rel_widths = c(1, 0.7),nrow = 1, ncol = 2)#拼接所有的散点图
Total<- plot_grid(Lineplot, middleright,vjust = 1.2, axis = "b", labels = c("a",""), label_size= 10,rel_widths = c(1, 0.7))#拼接左侧的回归曲线图Total

请添加图片描述
图注:拼图完成!关键点在于使用plot.margin微调子图间距,以及rel_widths控制左右比例。

复现完成! 总结一下关键点:

  • 数据组织:清晰分隔不同子图所需数据。

  • 回归图:geom_ribbon画置信区间,size=1/vi实现加权散点。

  • 点估计图:geom_pointrange是核心,position_dodge处理分组错位。

  • 拼图:cowplot::plot_grid是核心,精调plot.margin和rel_widths是成败关键。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/news/914743.shtml
繁体地址,请注明出处:http://hk.pswp.cn/news/914743.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

LVS集群调度器

目录 集群和分布式 LVS运行原理 LVS概念 LVS的集群类型 实验配置 安装LVS ipvsadm命令参数 1.管理集群服务中的增删改 2.管理集群服务中的RS增删改 3.lvs调度策略的备份与恢复 4.lvs调度策略的开机启动 LVS-NAT模式 LVS-DR模式 集群和分布式 集群&#xff08;Clu…

【React Natve】NetworkError 和 TouchableOpacity 组件

NetworkError公共组件 import SimpleLineIcons from "expo/vector-icons/SimpleLineIcons"; import { StyleSheet, Text, View } from "react-native";export default function NetworkError() {return (<View style{styles.container}><SimpleL…

Linux 驱动中 Timer / Tasklet / Workqueue 的作用与对比

Linux 驱动中 Timer / Tasklet / Workqueue 的作用与对比 &#x1f9e9; 1. 使用场景概览&#xff08;对比表&#xff09;机制执行上下文是否可睡眠使用场景常用接口Timer中断上下文❌ 不可睡眠延迟执行&#xff08;如防抖、超时处理&#xff09;add_timer() 等Tasklet软中断上…

JavaScript中关于proxy的作用以及和Object.defineProperty的区别

之前写了一篇介绍 Object.defineProperty的&#xff0c;提到proxy&#xff0c;二者有一些共性&#xff0c;也都是前端框架Vue的核心机制&#xff0c;所以再写一篇介绍一下proxy的基础原理和使用。 在 JavaScript 中&#xff0c;Proxy 是 ES6 引入的一个元编程特性&#xff0c;用…

HTTP性能优化实战技术

HTTP性能优化实战技术文章大纲 理解HTTP性能优化的核心指标 关键指标&#xff1a;延迟、吞吐量、TTFB&#xff08;Time To First Byte&#xff09;、页面加载时间影响性能的因素&#xff1a;网络延迟、服务器响应时间、资源大小、协议效率 减少HTTP请求数量 合并资源文件&#…

ubuntu(22.04)系统上安装 MuJoCo

在 Linux 系统上安装 MuJoCo 的完整步骤如下&#xff1a; ​​1. 下载 MuJoCo​​ 访问 MuJoCo 官方 GitHub下载最新 Linux 版本&#xff08;如 mujoco-3.3.4-linux-x86_64.tar.gz&#xff09;获取对应的 SHA256 校验值&#xff08;在发布页面可以找到,&#xff0c;文件名后面…

理解大模型的对话和检索能力

RAG和联网搜索均通过“检索生成”模式扩展模型能力&#xff0c;但RAG基于内部知识库&#xff08;如企业文档&#xff09;&#xff0c;适合专业领域问答&#xff1b;联网搜索实时检索互联网&#xff0c;解决时效性问题&#xff08;如新闻、股价&#xff09;。RAG响应快且可控&am…

跟着Carl学算法--回溯【2】

IP复原&#xff08;难&#xff09; 力扣链接&#xff1a;IP复原 题目&#xff1a;有效 IP 地址 正好由四个整数&#xff08;每个整数位于 0 到 255 之间组成&#xff0c;且不能含有前导 0&#xff09;&#xff0c;整数之间用 . 分隔。 例如&#xff1a;"0.1.2.201"…

PyTorch生成式人工智能(17)——变分自编码器详解与实现

PyTorch生成式人工智能(17)——变分自编码器详解与实现 0. 前言1. 潜空间运算2. 变分自编码器2.1 自编码器与变分自编码器对比2.2 模型训练流程3. 构建变分自编码器3.1 模型构建3.2 模型训练3.3 生成图像4. 向量运算小结系列链接0. 前言 虽然自编码器 (AutoEncoder, AE) 在重…

SpringMVC2

一、接口声明的稳定性- 接口声明不能轻易变&#xff1a;接口是前后端、服务间通信的约定。要是接口的 URL、请求方法、参数、返回值变了&#xff0c;调用方&#xff08;比如前端、其他服务&#xff09;就得跟着改&#xff0c;容易出问题。所以设计接口要谨慎&#xff0c;别老变…

LVS集群实践

一、LVS概念VS: Virtual Sever &#xff08;调度器&#xff09;RS: Real Sever &#xff08;资源主机&#xff09;CIP: Client IP &#xff08;用户IP&#xff09;VIP: Virtual sever IP &#xff08;VS外网的IP&#xff0c;客户访问的IP&#xff09;DIP: Director IP &#xf…

使用Django框架构建Python Web应用

前言Django个高级Python Web框架&#xff0c;遵循MTV&#xff08;Model-Template-View&#xff09;设计模式&#xff1a;模型(Model)&#xff1a;数据层&#xff0c;定义数据结构模板(Template)&#xff1a;表现层&#xff0c;处理用户界面视图(View)&#xff1a;业务逻辑层&am…

[AI-video] 数据模型与架构 | LLM集成

第五章&#xff1a;数据模型与架构 欢迎来到第五章&#xff01; 在前几章中&#xff0c;我们学习了网页用户界面&#xff08;UI&#xff09;&#xff08;控制面板&#xff09;、应用配置&#xff08;系统参数设置&#xff09;、任务编排&#xff08;视频生成流程的总调度&…

HTTP 性能优化实战:突破高并发瓶颈的工业级方案

在互联网高并发场景中&#xff0c;HTTP 性能表现直接决定系统生死。当每秒请求量突破十万级甚至百万级时&#xff0c;哪怕 100 毫秒的延迟都会引发用户流失、交易失败等连锁反应。本文基于五大行业实战案例&#xff0c;拆解 HTTP 性能瓶颈的底层逻辑&#xff0c;输出可直接落地…

Xsens人形机器人拟人动作AI训练,提升机器人工作精度与效率

随着人工智能与机器人技术的深度融合&#xff0c;人形机器人正从实验室走向工业制造、医疗护理、公共服务等真实场景。然而&#xff0c;要让机器人真正"像人类一样工作"&#xff0c;其动作的流畅性、精准度与环境适应性仍是技术突破的关键。Xsens动作捕捉系统通过创新…

IIS网站间歇性打不开暴力解决方法

背景 网站使用 Asp.NET 框架开发&#xff0c;使用 SQL Server 2012 IIS 8.5 运行。开发上线以后&#xff0c;经常出现网站间歇性打不开&#xff0c;但是重启 IIS 就可以正常访问。 问题排查过程 打开日志记录 观察 CPU&#xff0c;内存&#xff0c;带宽流量等占用正常&#xf…

JavaScript 动态访问嵌套对象属性问题记录

问题描述不能解析 2 层 只能解析一层在 Vue 项目中&#xff0c;尝试通过动态路径&#xff08;如 otherInfo.businessPlacePhotoUrlLabel&#xff09;访问或修改嵌套对象属性时&#xff0c;发现 this[a.b.c] 无法正确解析&#xff0c;导致返回 undefined。错误示例removeImg(val…

7.17 滑动窗口 | assign

lc3015.法1&#xff1a;暴力bfs&#xff0c;数据范围only 100&#xff0c;可以过法2&#xff1a;加入了x,y&#xff0c;可以思考加入的x,y影响了什么呢? 通过数学找规律class Solution { public:vector<int> countOfPairs(int n, int x, int y) {vector<int> ret(…

预训练模型:大规模数据预学习范式——定义、原理与演进逻辑

本文由「大千AI助手」原创发布&#xff0c;专注用真话讲AI&#xff0c;回归技术本质。拒绝神话或妖魔化。搜索「大千AI助手」关注我&#xff0c;一起撕掉过度包装&#xff0c;学习真实的AI技术&#xff01; 以下基于权威教材、学术论文及行业技术报告&#xff0c;对“预训练模型…

【kubernetes】--安全认证机制

文章目录安全认证1. **身份认证&#xff08;Authentication&#xff09;**2. **授权&#xff08;Authorization&#xff09;**3. **准入控制&#xff08;Admission Control&#xff09;**4. **机密信息管理**5. **其他安全实践**安全认证 Kubernetes 的安全机制覆盖了从身份验…