跟着 Nature 学作图 | 相关性热图(显示相关性散点图)

news2024/11/25 23:34:30

3ad32f89a365d5c33bb6cff5140286b5.jpeg

corr

本期图片

9c8317291962fea070d50cfc81156ed7.png

Jiang, Y., Sun, A., Zhao, Y. et al. Proteomics identifies new therapeutic targets of early-stage hepatocellular carcinoma. Nature 「567」, 257–261 (2019). https://doi.org/10.1038/s41586-019-0987-8

复现结果

3fdc9f19af5f08f0a85ad4c6c818b7f8.png
image-20230615220659639

示例数据和代码领取

木舟笔记永久VIP企划

「权益:」

  1. 「木舟笔记所有推文示例数据及代码(「在VIP群里」实时更新」)。

    2fcd54a1052de6ad6e8aee046690a8e6.png
    data+code
  2. 木舟笔记「科研交流群」

「收费:」

「169¥/人」。可添加微信:mzbj0002 转账(或扫描下方二维码),或直接在文末打赏。木舟笔记「2022VIP」可直接支付「70¥」升级。

点赞在看 本文,分享至朋友圈集赞30个保留30分钟,可优惠20¥

e35d2fe3061eed6ef113bc3901b1e092.png

绘图

法一是用corrgram包内的pairs函数实现,包内没有纯色填充方式需要设置自定义函数。

setwd(dir = 'F:/MZBJ/Corrplot')
df = read.csv('sample_data.csv', row.names = 1)
df = log(df+1)
library(corrgram)
pairs(df)
e60db42412e25d861e02cdfc5df39922.png

默认格式绘制已经接近了接下来我们自定义panel函数来绘制上下两部分

panel.fill<- function(x, y, digits = 2, prefix = "",col = "red", cex.cor, ...)
{
  par(usr = c(0, 1, 0, 1))#设置panel大小
  r <- abs(cor(x, y))#计算相关性,此处使用的绝对值
  txt <- format(r, digits = digits)[1]#相关性洗漱保留两位小数
  col <- colorRampPalette(c("grey",'grey','grey', 'red'))(100)#生成一组色阶用于相关性系数映射
  rect(0, 0, 1, 1, col = col[ceiling(r * 100)])#按相关性系数值从色阶中提取颜色
  text(0.5, 0.5, txt, cex = 1.5,col = '#77787b', font = 2 )#设置文本格式
}


pairs(df,
      lower.panel = panel.fill,
      gap = 0)
2927d0f8b102de7697c91e7ac91b2d8f.png
panel.point <- function(x, y, ...){       
  r <- abs(cor(x, y))
  col <- colorRampPalette(c("grey",'grey','grey', 'red'))(100)  
  rect(par("usr")[1], par("usr")[3], par("usr")[2], par("usr")[4], #将panel范围填充为对应颜色
       col = col[ceiling(r * 100)],lwd = 2)
  plot.xy(xy.coords(x, y), type = "p", #绘制散点图
          pch = 20, 
          cex = .2,
          ...)
}

pairs(df,
      upper.panel = panel.point,
      lower.panel = panel.fill,
      gap = 0)
e2fe749c4cd3f12f27cf354e7bb0047f.png
text.panel <- function(x, y, txt, cex, ...)
{ text(x, y, txt, cex = cex, font = 2)
  box(lwd = 1)
}

pairs(df,
      upper.panel = panel.point,
      lower.panel = panel.fill,
      text.panel = text.panel,
      gap = 0)
75aff7fcb8a8f5662c2fb0c39d9dccda.png

法二是尝试用GGally包来实现一下,ggplot的语法相对来说更易读。实现直接绘制一下看看是什么情况。

library(GGally)
library(ggplot2)
ggpairs(df,1:4)
7db4be00882fdb16e29ebb2e2d91919f.png
image-20230615214303760

先绘制上三角部分

GGup <- function(data, mapping, ..., 
                 method = "pearson") {
  
  x <- GGally::eval_data_col(data, mapping$x)#提取x,y值
  y <- GGally::eval_data_col(data, mapping$y)
  
  cor <- cor(x, y, method = method, use="pairwise.complete.obs")#计算相关系数
  df <- data.frame(x = x, y = y)
  df <- na.omit(df)
  col <- colorRampPalette(c("grey",'grey','grey', 'red'))(100) #生成色阶以便后面映射提取
  
  cor_col = col[ceiling(cor * 100)]#按照相关系数来提取色阶中的颜色
  pp <- ggplot(df) +
    geom_text(data = data.frame(
      xlabel = min(x,na.rm = T),
      ylabel = min(y,na.rm = T), 
      labs = round(cor,2)),
      aes(x = xlabel, y = ylabel, label = labs),
      size = 10,
      fontface = "bold",
      inherit.aes = FALSE
    )+
    theme_bw()+
    theme(panel.background = element_rect(fill =  cor_col))
  return(pp)
}
ggpairs(df, 1:4, upper = list(continuous = wrap(GGup)))
7cdc1315ccfecb1628e1fa3d1c8b0825.png

然后是下三角

GGdown <- function(data, mapping, ..., 
                   method = "pearson") {
  x <- GGally::eval_data_col(data, mapping$x)
  y <- GGally::eval_data_col(data, mapping$y)
  col <- colorRampPalette(c("grey",'grey','grey', 'red'))(100)  
  cor <- cor(x, y, method = method, use="pairwise.complete.obs")
  cor_col = col[ceiling(cor * 100)]
  
  df <- data.frame(x = x, y = y)
  df <- na.omit(df)
  
  pp <- ggplot(df, aes(x=x, y=y)) +
    ggplot2::geom_point( show.legend = FALSE, size = 1) +
    theme_bw()+
    theme(panel.background = element_rect(fill =  cor_col))
  return(pp)
}

ggpairs(df, 1:4,
        upper = list(continuous = wrap(GGup)),
        lower = list(continuous = wrap(GGdown)))
d2e16b7c4b8e8f5d9dff9286da57e4a1.png
image-20230615220026274

最后是对角线注释

GGdiag = function(data, mapping, ...){
  name= deparse(substitute(mapping))#提取出映射变量名(并非变量名本身,可用性尝试一下不进行下一步)
  name = str_extract(name, "x = ~(.*?)\\)", 1)#对变量名进行处理提取出变量名
  ggplot(data = data) +
    geom_text(aes(x = 0.5, y = 0.5, label = name), size = 5)+
    theme_bw()+
    theme(panel.background = element_blank())#将变量名绘制于图中央
}


ggpairs(df, 1:4,
        upper = list(continuous = wrap(GGup)),
        lower = list(continuous = wrap(GGdown)),
        diag = list(continuous = wrap(GGdiag)))
eb0351d79a0840dbe17692fdc7995bf9.png

最后再调整一下风格,完成。

ggpairs(df,
        upper = list(continuous = wrap(GGup)),
        lower = list(continuous = wrap(GGdown)),
        diag = list(continuous = wrap(GGdiag)))+
  theme(panel.grid = element_blank(),
        axis.text =  element_blank(),
        strip.background = element_blank(),
        strip.text = element_blank())
871464c3397f50451dedc759360bc451.png

往期内容

  1. 资源汇总 | 2022 木舟笔记原创推文合集(附数据及代码领取方式)

  2. CNS图表复现|生信分析|R绘图 资源分享&讨论群!

  3. R绘图 | 浅谈散点图及其变体的作图逻辑

  4. 这图怎么画| 有点复杂的散点图

  5. 这图怎么画 | 相关分析棒棒糖图

  6. 组学生信| Front Immunol |基于血清蛋白质组早期诊断标志筛选的简单套路

  7. (免费教程+代码领取)|跟着Cell学作图系列合集

  8. Q&A | 如何在论文中画出漂亮的插图?

  9. 跟着 Cell 学作图 | 桑葚图(ggalluvial)

  10. R实战 | Lasso回归模型建立及变量筛选

  11. 跟着 NC 学作图 | 互作网络图进阶(蛋白+富集通路)(Cytoscape)

  12. R实战 | 给聚类加个圈圈(ggunchull)

  13. R实战 | NGS数据时间序列分析(maSigPro)

  14. 跟着 Cell 学作图 | 韦恩图(ggVennDiagram)


0ae7382fe473e3c9db493a2ac8180b2f.png
木舟笔记矩阵

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

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

相关文章

紧随时代脚步,一览直播数据

第一为什么直播间要去做复盘&#xff1f;主要是为了找对做直播内容的方向&#xff0c;少走弯路&#xff0c;通过复盘来找出问题&#xff0c;进一步分析问题、解决问题&#xff0c;同时及时调整运营策略。 第二从哪里查看数据&#xff1f;可以通过什么样的平台去查看直播间的数据…

让天下没有难Tuning的大模型-PEFT(参数效率微调)技术简介

​ https://www.yuque.com/meta95/hmc3l4/ozgy13dx4akv7v17?singleDoc# 《让天下没有难Tuning的大模型-PEFT技术简介》 最近&#xff0c;深度学习的研究中出现了许多大型预训练模型&#xff0c;例如GPT-3、BERT等&#xff0c;这些模型可以在多种自然语言处理任务中取得优异的…

C++类和对象(多态)

4.7多态 4.7.1多态的基本概念 多态是C面向对象三大特性之一 多态分为两类 静态多态&#xff1a;函数重载和运算符重载属于静态多态&#xff0c;复用函数名。动态多态&#xff1a;派生类和虚函数实现运行时多态 静态多态和动态多态区别&#xff1a; 静态多态的函数地址早绑…

SpringBoot 如何使用 Tomcat 容器

SpringBoot 如何使用 Tomcat 容器 SpringBoot 是一种基于 Spring 框架的快速开发框架&#xff0c;它提供了许多功能和组件&#xff0c;其中包括了内置的 Tomcat 容器。在本文中&#xff0c;我们将介绍如何使用 SpringBoot 内置的 Tomcat 容器来运行 Web 应用程序。 SpringBoot…

ubuntu 18.04系统python3.6 升级到 python3.9

1.安装依赖库 sudo apt-get install build-essential libbz2-dev libssl-dev libreadline-dev libsqlite3-dev 2.下载 Python 3.9 源代码 wget https://www.python.org/ftp/python/3.9.5/Python-3.9.5.tar.xz # 解压 tar -xf Python-3.9.5.tar.xz 3.编译Python 3.9 cd Pytho…

Grounded-Segment-Anything本地部署

Grounded-Segment-Anything本地部署 1.本地部署源码1.1 克隆源码1.2 下载初始参数 2. 创建虚拟环境及配置3. 测试相关文件3.1 运行grounding_dino_demo.py文件3.2 运行grounded_sam_demo.py文件3.3 运行grounded_sam_simple_demo.py文件3.4 grounded_sam_inpainting_demo.py文件…

Spring Boot 如何使用 Jetty 容器

Spring Boot 如何使用 Jetty 容器 Jetty 是一款轻量级的 Java Web 容器&#xff0c;适用于各种规模的 Web 应用程序。在 Spring Boot 中&#xff0c;我们可以使用 Jetty 作为 Web 容器来处理 HTTP 请求和响应。本文将介绍 Spring Boot 如何使用 Jetty 容器&#xff0c;包括如何…

SpringBoot 如何使用 AOP 容器

SpringBoot 如何使用 AOP 容器 SpringBoot 是基于 Spring Framework 的一种快速开发框架&#xff0c;它提供了丰富的功能和组件&#xff0c;其中之一就是 AOP&#xff08;面向切面编程&#xff09;。AOP 是一种编程范式&#xff0c;可以将横向关注点&#xff08;如日志记录、事…

紫东太初:造一个国产大模型,需用多少篇高质量论文?

原创&#xff1a;谭婧 “视觉自监督算法这轮&#xff0c;你是不是没跟上&#xff1f;” 我面前这位年薪近七十万&#xff0c;互联网大厂AI算法工程师的好友&#xff0c; 他用一个反问句回答了我的关心&#xff1a; “自监督这个玩意咋跟上&#xff1f;” 他抬了抬头&#xff0c…

shell 拼接字符串,出现后面的字符串覆盖前面的字符串问题

字符串拼接语法 shell 拼接字符串语法很简单两个参数并排前后写上接口&#xff0c;如下 str1www str2bbb s t r 1 str1 str1str2 的结果未 wwwbbb 有时会出现如下问题&#xff1a; 在拼接字符串的时候&#xff0c;后面的字符串将前面的字符串覆盖了。 一、问题描述 shell的…

Unity3D:Game 视图

推荐&#xff1a;将 NSDT场景编辑器 加入你的3D工具链 3D工具集&#xff1a; NSDT简石数字孪生 Game 视图 从应用程序中的摄像机渲染 Game 视图。 该视图代表最终发布的应用程序。 需要使用一个或多个摄像机来控制玩家在使用应用程序时看到的内容。 有关摄像机的更多信息&#…

Github调研:开发者对生产力、协作和AI编码工具的看法

Datawhale干货 翻译&#xff1a;段秋阳 Datawhale成员 调研背景 GitHub首席产品官Inbal Shani如是说&#xff1a; 今天的开发人员所做的不仅仅是编写和发布代码&#xff0c;他们还需要熟练应用各种工具、环境和技术&#xff0c;包括生成人工智能编码工具这个新领域。但对开发人…

Python基础(14)——Python元组(tuple)详解

Python基础&#xff08;14&#xff09;——Python元组&#xff08;tuple&#xff09;详解 文章目录 Python基础&#xff08;14&#xff09;——Python元组&#xff08;tuple&#xff09;详解课程&#xff1a;元组目标一. 元组的应用场景二. 定义元组三. 元组的常见操作四. 总结…

vue进阶-vue-route

Vue Router 是 Vue.js 的官方路由。它与 Vue.js 核心深度集成&#xff0c;让用 Vue.js 构建单页应用变得轻而易举。 本章只做学习记录&#xff0c;详尽的内容一定要去官网查看api文档 Vue Router-Vue.js 的官方路由 1. 路由的基本使用 1.1 安装vue-router npm install vue-…

图解transformer中的自注意力机制

本文将将介绍注意力的概念从何而来&#xff0c;它是如何工作的以及它的简单的实现。 注意力机制 在整个注意力过程中&#xff0c;模型会学习了三个权重:查询、键和值。查询、键和值的思想来源于信息检索系统。所以我们先理解数据库查询的思想。 假设有一个数据库&#xff0c…

Django-带参数的路由编写(二)【用正则表达式匹配复杂路由】

在上一篇博文中&#xff0c;学习了“不用正则表达式匹配的简单带参数路由”&#xff0c;详情见链接&#xff1a; https://blog.csdn.net/wenhao_ir/article/details/131225388 本篇博文学习用“用正则表达式匹配复杂路由”。 简单的参数路由用库django.urls中的函数path()就可…

内涝监测系统如何助力城市防洪抗涝

近年来&#xff0c;各地内涝问题愈发严重&#xff0c;强降雨天气导致城市内涝已经屡见不鲜了&#xff0c;城市内涝不仅影响城市交通、居民生活&#xff0c;还可能对建筑物和基础设施造成损害&#xff0c;给城市运行带来重大风险。内涝治理除了要解决城市“里子”问题&#xff0…

【2023,学点儿新Java-11】基础案例练习:输出个人基础信息、输出心形 | Java中 制表符\t 和 换行符\n 的简单练习

前情回顾&#xff1a; 【2023&#xff0c;学点儿新Java-10】Java17 API文档简介&获取 |详解Java核心机制&#xff1a;JVM |详解Java内存泄漏与溢出 |Java优缺点总结 |附&#xff1a;GPT3.5-turbo问答测试【2023&#xff0c;学点儿新Java-09】Java初学者常会犯的错误总结与…

数据库SQL Server实验报告 之 SQL语言进行数据更新(6/8)

SQL语言进行数据更新 生命的本质是一场历练 实验目的及要求&#xff1a; 掌握如何使用sql语句进行插入、删除和更新操作。使用sql语句进行插入操作。使用sql语句进行删除操作。使用sql语句进行更新操作。使用各种查询条件完成指定的查询操作 实验内容及步骤&#xff1a…

计算机基础--->网络(2)【TCP、UDP、IP、ARP】

文章目录 TCP与UDP的区别TCP三次握手和四次挥手为什么要三次握手&#xff1f;第二次握手传回了ACK&#xff0c;为什么还要传回SYN&#xff1f;为什么要四次挥手&#xff1f;为什么不能将服务器发送的ACK和FIN合并起来&#xff0c;变成三次挥手&#xff1f;TCP如何保证传输的可靠…