前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >使用ggpubr包的stat_cor函数一步到位绘制相关性散点图并且添加统计学指标

使用ggpubr包的stat_cor函数一步到位绘制相关性散点图并且添加统计学指标

作者头像
生信技能树
发布2023-02-27 21:12:21
1.8K0
发布2023-02-27 21:12:21
举报
文章被收录于专栏:生信技能树

相关性散点图在生物信息学数据分析里面比较高频,比如RNA-seq和ATAC-seq数据整合分析,详见:RNA-seq和ATAC-seq数据整合分析怎么少的了相关性散点图

再比如前面笔记两次单细胞差异分析后的结果进行相关性散点图绘制提到的两次差异分析结果的对比,就使用了ggpubr包的ggscatter函数绘制了相关性散点图:

代码语言:javascript
复制
ids=intersect(rownames(CD14_deg),
              rownames(FCGR3A_deg))
df= data.frame(
  FCGR3A_deg = FCGR3A_deg[ids,'avg_log2FC'],
  CD14_deg = CD14_deg[ids,'avg_log2FC']
)
library(ggpubr)
ggscatter(df, x = "FCGR3A_deg", y = "CD14_deg",
          color = "black", shape = 21, size = 3, # Points color, shape and size
          add = "reg.line",  # Add regressin line
          add.params = list(color = "blue", fill = "lightgray"), # Customize reg. line
          conf.int = TRUE, # Add confidence interval
          cor.coef = TRUE, # Add correlation coefficient. see ?stat_cor
          cor.coeff.args = list(method = "pearson",  label.sep = "\n")
)

ggpubr包的ggscatter函数绘制了相关性散点图已经很好了,不过它显得跟ggplot2的语法脱节了。

后来发现了一个更好的解决方案,就是ggpubr包的stat_cor函数:

代码语言:javascript
复制
# https://github.com/LKremer/ggpointdensity
# ggpubr to add the correlation

library(ggpubr)
ggplot(expression_data, aes(x= CD3D, y = CD4)) + 
        # geom_smooth(method="lm") +
        geom_point(size = 0.8) +
        facet_wrap(~seurat_annotations) +
        ggpubr::stat_cor(method = "pearson")

可以很容易的保留ggplot2的语法:

保留ggplot2的语法

让我们来实战演练一下:

相关性热图即可

如下所示的模拟数据,理论上g开头的和v开头的应该是负相关,而g内部和v内部都是正相关:

代码语言:javascript
复制
g1=1:50
g2=g1+rnorm(50)
g3=g1+rnorm(50)
g4=g1+rnorm(50)
g5=g1+rnorm(50)

v1=50:1
v2=v1+rnorm(50)
v3=v1+rnorm(50)
v4=v1+rnorm(50)
v5=v1+rnorm(50)

m=cbind(g1,g2,g3,g4,g5,
        v1,v2,v3,v4,v5)
pheatmap::pheatmap(cor(m))
head(df)

如下所示:

完美的相关性示例数据

我们 就可以单独看其中一个数据是如何跟其它数据正相关或者负相关的。比如我们想看看g1这个数据其它的10个数据的相关性:

代码语言:javascript
复制
library(reshape2)
df=melt(m)
head(df)
df$g1=rep(g1,10)

library(ggpubr)
ggplot(df, aes(x= g1, y = value)) + 
  # geom_smooth(method="lm") +
  geom_point(size = 0.8) +
  facet_wrap(~Var2,nrow = 2) + theme_bw()+
  ggpubr::stat_cor(method = "pearson")

如下所示:

正负值相关性

该如何系统性学习ggplot呢

如果你要从ggplot2开始一步步调制成为它这样的美图,需要下很深的功夫,一张统计图就是从数据到几何对象(点、线、条形等)的图形属性(颜色、形状、大小等)的一个映射。

  • ✦ 数据(Data),最基础的是可视化的数据和一系列图形映射(aesthetic mappings),该映射描述了数据中的变量如何映射到可见的图形属性。
  • ✦ 几何对象(Geometric objects, geoms)代表在图中实际看到的点、线、多边形等。
  • ✦ 统计转换(Statistical trassformations, stats)是对数据进行某种汇总,例如将数据分组创建直方图,或将一个二维的关系用线性模型进行解释。
  • ✦ 标度(Scales)是将数据的取值映射到图形空间,例如用颜色、大小或形状来表示不同的取值,展现标度的常见做法是绘制图例和坐标轴。
  • ✦ 坐标系(Coordinate system, coord)描述数据是如何映射到图形所在的平面,同时提供看图所需的坐标轴和网格线。
  • ✦ 分面(faceting)如何将数据分解为子集,以及如何对子集作图并展示。
  • ✦ 主题(theme)控制细节显示,例如字体大小和图形的背景色。

前面我们介绍了绘图小白神包:

另外推荐5个ggplot2资源

ggplot2作者亲自写的书

链接:https://ggplot2-book.org/facet.html

书名是:ggplot2: Elegant Graphics for Data Analysis 作者:Hadley Wickham

This is the online version of work-in-progress 3rd edition of “ggplot2: elegant graphics for data analysis”

虽然这本书有对应的中文译本,但是时间上相对滞后,建议直接看这个在线实时更新版本。

知识点参考卡片(速记表,小抄)

链接:https://ggplot2.tidyverse.org/reference/

sthda网站的ggplot核心图表示例

链接:http://www.sthda.com/english/wiki/ggplot2-essentials

书籍本身提供售卖,价格是17欧元,不过内容都是电子化了,大家直接网页浏览,就是免费的哈!

绘图菜谱

链接:http://www.cookbook-r.com/Graphs/

这个有中文翻译版本,务必直接下单购买,放在书桌旁边随时翻阅。

最后一个是 https://stackoverflow.com/

你会发现,你想实现的各种稀奇古怪的绘图需求,只需要你能使用英文描述出来,就是能找到答案的!

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2023-02-06,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 生信技能树 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 相关性热图即可
  • 该如何系统性学习ggplot呢
  • 另外推荐5个ggplot2资源
    • ggplot2作者亲自写的书
      • 知识点参考卡片(速记表,小抄)
        • sthda网站的ggplot核心图表示例
          • 绘图菜谱
          • 最后一个是 https://stackoverflow.com/
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档