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

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

本期图片

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

复现结果

image-20230615220659639


绘图

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

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

默认格式绘制已经接近了接下来我们自定义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)

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)

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)

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

library(GGally)
library(ggplot2)
ggpairs(df,1:4)

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)))

然后是下三角

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)))

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)))

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

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())

往期内容

  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)
相关文章
|
安全 Unix Linux
Windows如何远程连接服务器?服务器远程连接图文教程
服务器操作系统可以实现对计算机硬件与软件的直接控制和管理协调,任何计算机的运行离不开操作系统,服务器也一样,服务器操作系统主要分为四大流派:Windows Server、Netware、Unix和Linux。今天驰网飞飞将和你分享Windows server远程连接图文教程,希望可以帮助到你
7934 4
Windows如何远程连接服务器?服务器远程连接图文教程
|
JavaScript 数据可视化 定位技术
echart:html中使用& echarts 的使用
本文介绍了如何在HTML中使用ECharts图表库,包括通过CDN引入ECharts和ECharts-GL,创建基本的柱状图示例,以及在Vue项目中使用ECharts的方法。同时,提供了快速安装和配置ECharts的代码示例,以及如何添加地图插件的指导。
1525 1
|
机器学习/深度学习 编解码 自然语言处理
论文阅读笔记 | Transformer系列——Swin Transformer
论文阅读笔记 | Transformer系列——Swin Transformer
2701 0
论文阅读笔记 | Transformer系列——Swin Transformer
|
数据可视化 数据挖掘 定位技术
Python和Geopandas进行地理数据可视化
【10月更文挑战第22天】本文介绍了如何使用Python和Geopandas进行地理数据可视化和分析,涵盖从准备工作、加载数据、数据探索与处理、地理数据可视化、空间分析与查询到交互式地理数据可视化等内容。通过丰富的代码示例和案例演示,帮助读者掌握地理数据分析的基本方法,为实际应用提供支持。
1498 19
|
机器学习/深度学习 数据可视化 算法
机器学习中的回归分析:理论与实践
机器学习中的回归分析:理论与实践
|
Web App开发 数据可视化 数据挖掘
利用R语言进行聚类分析实战(数据+代码+可视化+详细分析)
利用R语言进行聚类分析实战(数据+代码+可视化+详细分析)
|
并行计算 数据可视化 算法
CMplot & rMVP | 全基因组曼哈顿图和QQ图轻松可视化!
`CMplot`和`rMVP`是R语言中的两个包,用于全基因组关联分析(GWAS)的数据可视化。`CMplot`专注于曼哈顿图和QQ图的绘制,支持多种图表类型,如常见的SNP密度图、环状曼哈顿图、矩阵图、单条染色体图和多重曼哈顿图等。`rMVP`不仅包含了`CMplot`的功能,还支持更复杂的GWAS方法,如线性/混合线性模型和基因组选择算法,优化了内存管理和计算效率,特别适合大规模数据集。此外,它还提供PCA图和柱状图。两者都提供了丰富的参数定制图表。
2744 1
CMplot & rMVP | 全基因组曼哈顿图和QQ图轻松可视化!
|
数据处理
R语言数据合并:掌握`merge`与`dplyr`中`join`的巧妙技巧
【8月更文挑战第29天】如果你已经在使用`dplyr`进行数据处理,那么推荐使用`dplyr::join`进行数据合并,因为它与`dplyr`的其他函数(如`filter()`、`select()`、`mutate()`等)无缝集成,能够提供更加流畅和一致的数据处理体验。如果你的代码中尚未使用`dplyr`,但想要尝试,那么`dplyr::join`将是一个很好的起点。
1021 3
|
机器学习/深度学习 人工智能 测试技术
【机器学习】R-squared系数有什么缺点?如何解决?
【5月更文挑战第20天】【机器学习】R-squared系数有什么缺点?如何解决?
|
网络安全
ArcMap创建渔网从而获取网格状的矢量分区
本文介绍在ArcMap软件中,通过“Create Fishnet”工具创建渔网,从而获得指定大小的矢量格网数据的方法~
872 1
ArcMap创建渔网从而获取网格状的矢量分区