R高级绘图 | P1 | 带边缘分布散点图 | 代码注释 + 结果解读

news2024/11/17 9:48:19

新系列 —— R高级绘图,准备整理所有曾经绘制过的图图和未来需要的图图们的代码!预计这个系列会囊括所有常见图形,只提供高级绘图代码,基础绘图主要在 R语言绘图 系列中进行介绍,这个系列咱们主打:需要XX图?没问题!来这里!找到你要画的图!点进去!直接复制粘贴RUN!

更新顺序随机,小伙伴们有急需想要的图图也可以后台告诉我!我给它优先更新!

带边缘分布散点图

带边缘分布散点图(Scatter Plot with Distribution Plots),用于同时显示两个变量的散点分布以及每个变量的边缘分布。它将散点图与边缘直方图或核密度估计图结合起来,提供了更全面的数据分析视角。在这种图中,通常沿着图的边缘或周围绘制边缘直方图核密度估计图,以显示每个变量的分布情况,而散点图则展示了两个变量之间的关系。

带边缘分布散点图经常用于展示两个生物学特征之间的关系,并且可以提供关于每个特征的单独分布的信息。以下是一些在生物信息学领域中使用带边缘分布散点图的常见应用:

  1. 基因表达和关联分析: 通过在横轴和纵轴上分别表示两个基因的表达水平,可以使用带边缘分布散点图来展示它们之间的相关性。这有助于发现共表达基因、检测共调控模式以及了解基因表达的整体分布。
  2. 疾病与基因关联: 用于研究基因与特定疾病之间的关联。例如,可以将基因的变异情况与患病状态绘制在散点图上,同时在边缘显示基因变异和患病状态的分布情况。
  3. 蛋白质-蛋白质相互作用网络: 在蛋白质组学研究中,可以使用带边缘分布散点图来可视化蛋白质之间的相互作用关系。横轴和纵轴上的变量可能分别表示两个蛋白质的特定性质,而散点图的模式和趋势有助于了解它们之间的相互作用。
  4. 突变和表达关系: 当研究基因突变与基因表达之间的关系时,带边缘分布散点图可以用于同时显示突变信息和基因表达水平,例如,可以将基因表达量在横轴上表示,基因突变情况在纵轴上表示,并在边缘绘制基因表达和突变的分布,这有助于发现突变与表达之间的关联。
  5. 单细胞: 在单细胞研究中,带边缘分布散点图可以用于可视化单细胞表达谱中不同细胞群体之间的关系,同时提供每个基因的边缘表达分布信息。
  6. ……(让我们聪明的小脑瓜子自由发挥吧!!!)

总的来说,带边缘分布散点图提供了一个直观的方式来同时观察两个变量之间的关系及其各自的分布情况,可用于多种分析,包括基因表达、相互作用网络、突变与表达关系等,有助于我们发现两个生物学特征之间潜在的关联和模式。

绘图代码

这里,我们使用了 ggplot2 包来创建带边缘分布的散点图,所用数据集为R自带的iris数据集(大家替换为自己的数据即可,记得与示例数据格式保持一致),其中展示了Sepal.LengthSepal.Width之间的关系,同时通过颜色区分了不同物种,也就是Species

首先绘制散点图

# 带边缘分布散点图(Scatter Plot with Distribution Plots)

# 我们使用R自带的iris数据集
head(iris)
#   Sepal.Length Sepal.Width Petal.Length Petal.Width Species
# 1          5.1         3.5          1.4         0.2  setosa
# 2          4.9         3.0          1.4         0.2  setosa
# 3          4.7         3.2          1.3         0.2  setosa
# 4          4.6         3.1          1.5         0.2  setosa
# 5          5.0         3.6          1.4         0.2  setosa
# 6          5.4         3.9          1.7         0.4  setosa

# 其中包含3个物种,每个物种包含50个样本
table(iris$Species)
# setosa versicolor  virginica 
#     50         50         50 

# 首先绘制散点图
p <- 
  # 指定数据集为iris,x轴为Sepal.Length,y轴为Sepal.Width,同时用颜色表示不同的物种
  ggplot(iris, aes(Sepal.Length, Sepal.Width, color = Species)) +
  
  # 添加散点图层,设置点的大小为4
  geom_point(size = 4) + 
  
  # 添加图表标签
  labs(
    title = 'Scatterplot with Edge Distribution',    # 标题,自己给图片起个名!
    subtitle = 'IRIS: Sepal.Length vs Sepal.Width',  # 副标题,展示两个变量是什么!
    caption = 'source: IRIS'   # 节标题,这里我们展示了图表来源!
  ) +
  
  # 设置颜色,不同颜色表示不同物种
  scale_color_manual(values = c("#025259", "#d94f04", "#f29325")) +
  
  # 设置主题为极简主题,并指定基础字体大小为14
  theme_minimal(base_size = 14) +
  
  # 设置绘图区域背景颜色为白色,并将图例放在底部,当然,咱想放哪放哪!随心所欲!
  theme(plot.background = element_rect(fill='white', color='white'),
        legend.position = 'bottom')
p

图形解读:

  1. 散点分布: 散点图展示了Sepal.LengthSepal.Width两个变量之间的关系。每个点代表iris数据集中的一个观测值,横轴是Sepal.Length,纵轴是Sepal.Width。通过观察散点的分布,可以初步判断这两个变量之间是否存在某种趋势或者模式。
  2. 颜色区分: 每个点通过颜色进行分类,颜色表示不同的物种。通过scale_color_manual函数设置了颜色映射,不同的颜色分别代表不同的物种。这样的颜色映射可以帮助我们直观地辨认出每个点所属的类别。
  3. 点的大小: 所有的点都使用了相同的大小,这可能是为了确保所有点在图中都有相似的可见性。点的大小通常可以用来突出重要的观测值或者显示数据的某些特性。

添加边缘分布图形

# 添加边缘分布图形

# 使用ggMarginal在散点图p上添加边缘分布图形

# 加载包,没安装的记得装一下哟!
library(ggExtra)

# 添加直方图类型的边缘分布图
p1 <- ggMarginal(p, type = "histogram", groupColour = TRUE, groupFill = TRUE, alpha = 0.7)
p1

# 函数解读:
# - `ggMarginal`: 用于在原始图上添加边缘分布图形的函数。
# - `type = "histogram"`: 指定了边缘分布图的类型为直方图。
# - `type = "density"`: 指定了边缘分布图的类型为核密度估计图。
# - `type = "boxplot"`: 指定了边缘分布图的类型为箱线图。
# - `type = "densigram"`: 指定了边缘分布图的类型为联合密度图。
# - `groupColour = TRUE`: 设置边缘分布图中的颜色与散点图中的颜色一致
# - `groupFill = TRUE`: 设置边缘分布图中的颜色与散点图中的颜色一致,并且填充颜色
# - `alpha = 0.7`: 设置图形的透明度,增加图形的可读性。

# 添加核密度估计图类型的边缘分布图
p2 <- ggMarginal(p, type = "density", groupColour = TRUE, groupFill = TRUE, alpha = 0.7)
p2

# 添加箱线图类型的边缘分布图
p3 <- ggMarginal(p, type = "boxplot", groupColour = TRUE, groupFill = TRUE, alpha = 0.7)
p3

# 添加联合密度图类型的边缘分布图
p4 <- ggMarginal(p, type = "densigram", groupColour = TRUE, groupFill = TRUE, alpha = 0.7)
p4

漂亮!!!

添加拟合线

如果你关注的是两个变量之间的相关性,比如两个基因表达水平之间或者某基因与疾病状态之间,这样就需要在散点图中添加拟合线,使用stat_smooth(method = lm, level = 0.99)即可实现。

添加拟合线时要注意是否需要不同组别(我们所用的数据中指不同物种)分别进行拟合,我们这里给大家演示一下。

# 添加拟合线
p <- 
  # 指定数据集为iris,x轴为Sepal.Length,y轴为Sepal.Width,同时用颜色表示不同的物种
  ggplot(iris, aes(Sepal.Length, Sepal.Width, color = Species)) +
  
  # 添加散点图层,设置点的大小为4
  geom_point(size = 4) + 
  
  # 添加拟合线,
  stat_smooth(method = lm, level = 0.99) +
  # `method = lm`: 设置平滑曲线的拟合方法为线性回归,我们也可以选择其他方法!
  # `se = F`: 设置不显示平滑曲线的标准误差带。
  # `level = 0.99`: 当采用线性回归方法拟合平滑曲线时,`level` 参数表示置信区间的水平。
  
# 添加图表标签
  labs(
    title = 'Scatterplot with Edge Distribution',    # 标题,自己给图片起个名!
    subtitle = 'IRIS: Sepal.Length vs Sepal.Width',  # 副标题,展示两个变量是什么!
    caption = 'source: IRIS'   # 节标题,这里我们展示了图表来源!
  ) +
  
  # 设置颜色,不同颜色表示不同物种
  scale_color_manual(values = c("#025259", "#d94f04", "#f29325")) +
  
  # 设置主题为极简主题,并指定基础字体大小为14
  theme_minimal(base_size = 14) +
  
  # 设置绘图区域背景颜色为白色,并将图例放在底部
  theme(plot.background = element_rect(fill='white', color='white'),
        legend.position = 'bottom')
p

p4 <- ggMarginal(p, type = "densigram", groupColour = TRUE, groupFill = TRUE, alpha = 0.7)
p4

哒哒哒!每个组别都拟合就会是这样子!所以如果你只有一个组,那图图肯定就很简单明了!快去试试吧!

但其实,还有一种更简单的方法!一个函数就能搞定!

为了方便大家复现,我们还是用iris数据集进行演示,大家可以将Sepal.LengthSepal.Width两个变量想象为你关注的两个基因你关注的某基因与可能相关的疾病

# 加载包,没安装的记得装一下哟!
library(ggstatsplot)

# 使用ggscatterstats创建带有边缘分布图的散点图
ggscatterstats(
  data = iris,                  # 使用iris数据集
  x = Sepal.Length,             # 设置x轴为Sepal.Length列的数据
  y = Sepal.Width,              # 设置y轴为Sepal.Width列的数据
  xlab = "Sepal Length",        # 设置x轴标签为"Sepal Length"
  ylab = "Sepal Width",         # 设置y轴标签为"Sepal Width"
  marginal = TRUE,              # 在图上添加边缘分布图
  marginal.type = "histogram",  # 边缘分布图的类型为直方图
  centrality.para = "mean",     # 在边缘分布图上显示中心趋势,使用均值
  margins = "both",             # 显示上下和左右两侧的边缘分布图
  title = "Relationship between Sepal Length and Sepal Width",    # 设置整个图的标题
  messages = FALSE,             # 禁用输出关于平均值和置信区间的消息
)

哇!是不是你想要的嘞!


那今天的分享就到这里啦!我们下期再见哟!

最后顺便给自己推荐一下嘿嘿嘿!

如果我的分享对你有用的话,欢迎关注点赞在看转发分享阿巴阿巴阿巴阿巴巴巴!这可是我的第一原动力!

蟹蟹你们的喜欢和支持!!!

啊对!如果小伙伴们有需求的话,也可以加入我们的交流群:一定要知道 | 我们的生信交流群终于来啦!

还有兴趣的话,也可以看看我掏心掏肺的干货满满 | 给生信小白的入门小建议 | 掏心掏肺版!绝对干货满满!

后续这个链接可能会更新,如果小伙伴点开它之后发现,咦,怎么失效啦!不要慌!咱们辛苦一下动动小手去公众号主页的作者精选那里,会有一篇同名的文章,点进去就是啦!

参考资料
  1. https://zhuanlan.zhihu.com/p/654728525
  2. https://zhuanlan.zhihu.com/p/627088942

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

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

相关文章

[Java 并发基础]多线程编程

文章参考&#xff1a; https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/Future.html https://juejin.cn/post/6970558076642394142 文章目录 线程的创建方式继承 Thread实现 Runnable 接口实现 Callable 接口使用 Lambda使用线程池 线程创建相关的 jdk源码Thr…

阿赵UE学习笔记——13、贴花

阿赵UE学习笔记目录 大家好&#xff0c;我是阿赵。   继续学习虚幻引擎的使用。这次介绍一种特殊的材质类型&#xff0c;贴花。 一、获取贴花资源 在没有分析贴花的原理之前&#xff0c;可以先去获得一些免费的贴花资源来使用&#xff0c;比如在Quixel上面就有专门的一个资源…

Git - 在公司中,使用 git 的流程是什么?遇到冲突怎么办?

目录 一、公司中 git 的使用流程 1.1、设置用户签名 1.2、创建分支&#xff0c;提交代码到远程仓库 1.3、创建 pr&#xff0c;code review 1.4、意外情况&#xff1a;分支冲突 一、公司中 git 的使用流程 1.1、设置用户签名 刚进公司&#xff0c;肯定是先初始化个人的用户…

教师社会地位最直观的表现是什么

教师社会地位最直观的表现是什么&#xff1f;当我们谈及教师社会地位时&#xff0c;不能仅仅从薪资、荣誉等角度去理解&#xff0c;而应从教师的工作环境、待遇、以及社会对教师的认知和尊重程度等方面进行全面考察。 教师的工作环境是他们社会地位的直观体现之一。一个良好的…

备战蓝桥杯---数据结构与STL应用(优先队列的小细节)

很显然&#xff0c;我们先二分求X,对于验证&#xff0c;一开始我先想的是直接求每个的不足电量再除充电量后向上取整&#xff0c;然后判断与k的大小关系。事实上&#xff0c;如果让k很大&#xff0c;若有两只手机在下一刻多没电&#xff0c;显然上述方法得出的结论是错误的&…

虹科干货 | 如何使用nProbe Cento构建100 Gbit NetFlow 传感器

本文是一份全面的指南&#xff0c;解释了如何使用nProbe Cento构建一个高效的100 Gbit NetFlow传感器。旨在帮助大家充分利用NetFlow技术&#xff0c;以监控和分析高速网络流量。 当需要监控分布式网络&#xff0c;了解流经上行链路或关键网段的网络流量时&#xff0c;NetFlow…

【JVM】类加载流程

目录 1.加载 2.链接 &#xff08;1&#xff09;校验 &#xff08;2&#xff09;准备 &#xff08;3&#xff09;解析 3.初始化 4.使用 5.卸载 1.加载 加载阶段&#xff0c;简言之&#xff0c;查找并加载类的二进制数据&#xff0c;生成 Class 的实例 在加载类时&#x…

SpringCloud_学习笔记_1

SpringCloud01 1.认识微服务 随着互联网行业的发展&#xff0c;对服务的要求也越来越高&#xff0c;服务架构也从单体架构逐渐演变为现在流行的微服务架构。这些架构之间有怎样的差别呢&#xff1f; 1.0.学习目标 了解微服务架构的优缺点 1.1.单体架构 单体架构&#xff…

Trinamic推出嵌入式运动控制模块,用于驱动大功率工业电机,大幅降低功耗

集成的实时、无传感器控制与驱动技术将功率损耗降低50%&#xff0c;可驱动功率高出三倍的电机(高达7A) TRINAMIC推出两款新型插槽式运动控制嵌入式模块及其开发工具&#xff0c;采用独特的实时无传感器控制技术。这些完备的控制/驱动模块通过在其板上实时处理关键功能&#xff…

JDBC 结构优化2

JDBC 结构优化2 文章目录 JDBC 结构优化2结构优化2 - ATM系统(存,取,转,查)1 Service2 事务3 ThreadLocal4 事务的封装 结构优化2 - ATM系统(存,取,转,查) 1 Service 什么是业务? 代表用户完成的一个业务功能&#xff0c;可以由一个或多个DAO的调用组成。软件所提供的一个功…

阿里云 DMS 执行sql变更

数据库开发-数据变更-无锁变更 选择数据库&#xff1a;比如要更新生产库&#xff0c;搜索生产库名字。 填入变更sql。

【计算机图形】几何(Geometry)和拓扑(Topology)

目录 参考文献三维实体建模内核CSG/BREPParasolid简介Parasolid接口函数Parasolid类的结构 Parasolid数据分类&#xff1a;几何(Geometry)和拓扑(Topology)拓扑(Topology)什么是“拓扑”呢&#xff1f;Principle Geometry- Topology - Construction Geometry案例&#xff1a;拓…

最新多功能PHP图床源码 /兰空图床Lsky Pro开源版v2.1/ 单纯的图床程序源码

源码介绍&#xff1a; Lsky Pro 是一个用于在线上传、管理图片的图床程序&#xff0c;中文名&#xff1a;兰空图床&#xff0c;你可以将它作为自己的云上相册&#xff0c;亦可以当作你的写作贴图库。 该程序的最初版本诞生于2017年10月&#xff0c;由ThinkPHP 5框架精心打造而…

飞致云开源社区月度动态报告(2024年1月)

自2023年6月起&#xff0c;中国领先的开源软件公司FIT2CLOUD飞致云以月度为单位发布《飞致云开源社区月度动态报告》&#xff0c;旨在向广大社区用户同步飞致云旗下系列开源软件的发展情况&#xff0c;以及当月主要的产品新版本发布、社区运营成果等相关信息。 飞致云开源大屏…

初谈C++:引用

文章目录 前言概述引用特性应用场景做参数做返回值 传值、传引用效率比较引用和指针的区别 前言 在学习C语言的时候会遇到指针&#xff0c;会有一级指针、二级指针…很容易让人头昏脑胀。在C里面&#xff0c;引入了引用的概念&#xff0c;会减少对指针的使用。引用相当于给一个…

Android矩阵Matrix变换setRectToRect,Kotlin

Android矩阵Matrix变换setRectToRect&#xff0c;Kotlin 在 Android画布Canvas裁剪区域clipRect&#xff0c;Kotlin-CSDN博客 基础上&#xff0c;增加一个点&#xff0c;通过setRectToRect挖出Bitmap原图中心区域的一块放到目标RectF里面。 import android.content.Context imp…

phpstudy安装mysql5.7后在my.ini文件中无法修改sql_mode

如标题&#xff0c;windows环境下使用phpstudy安装mysql5.7后需要修改mysql中的sql_mode配置&#xff0c;但是在phpstudy中打开mysql配置文件my.ini后&#xff0c; 通过查找找不到sql_mode或sql-mode&#xff0c; 此时无法在my.ini文件中直接进行修改&#xff0c;可以使用mysq…

开源大数据集群部署(八)Ranger编译部署

作者&#xff1a;櫰木 在hd1.dtstack.com主机root权限下操作。 1、 编译ranger ranger二进制包编译过程在本次过程中不做详细说明。简单说明如下&#xff1a; 在pom.xml中更改对应hadoop集群组件版本。ranger2编译前提条件是python3和mvn已安装完成。编译命令&#xff1a; …

ROS---机器人导航实现

ROS—机器人导航实现 1 准备工作 1.1 分布式架构 需要完成分布式框架的搭建并且能正常运行&#xff0c;在PC端可以远程登录机器人端。 1.2 功能包安装 在机器人端安装导航所需功能包&#xff1a; 安装 gmapping 包(用于构建地图):sudo apt install ros-<ROS版本>-g…

Linux下Docker搭建部署Typecho博客【详细版】

Linux下Docker搭建部署Typecho博客【详细版】 一、环境准备1.1.准备阿里云服务器【新用户免费使用三个月】1.2.准备远程工具【FinalShell】1.3.系统信息1.4.安装所需软件包1.5.设置docker镜像源1.6.更新yum软件包索引1.7.确认停用selinux 二、安装Docker2.1.安装Docker-Ce2.2.查…