跟著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
英文地址,請注明出處:http://en.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 的安全機制覆蓋了從身份驗…