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

新系列 —— 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)) +# 添加散点图层,设置点的大小为4geom_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")) +# 设置主题为极简主题,并指定基础字体大小为14theme_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)) +# 添加散点图层,设置点的大小为4geom_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")) +# 设置主题为极简主题,并指定基础字体大小为14theme_minimal(base_size = 14) +# 设置绘图区域背景颜色为白色,并将图例放在底部theme(plot.background = element_rect(fill='white', color='white'),legend.position = 'bottom')
pp4 <- 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.mzph.cn/news/659046.shtml

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

相关文章

【Web前端实操21】商城官网_白色导航

今日份实现白色导航栏部分&#xff0c;也就是第三部分&#xff0c;效果如图中划线所示&#xff1a; 本次实现代码如之前的全局样式不再赘述&#xff0c;如有需要可以去我博客的Web前端实操19或者20自行查看。 本次主要更新mi.css和index.htm。 实现导航栏所需要的CSS样…

2015年苏州大学837复试机试C/C++

2015年苏州大学复试机试 第一题 题目 有36块砖&#xff0c;现在有36个人&#xff0c;男人能搬4块&#xff0c;女人能搬3块&#xff0c;小孩子两人搬一块&#xff0c;求一次搬完这些砖要男人&#xff0c;女人&#xff0c;小孩多少人&#xff1f; 代码 #include <iostrea…

仰暮计划|“那时候在生产队下面,集体干活,吃大锅饭,由队里分粮食,吃不饱饭是常事,队里分的粮食就那么点,想要吃饱真的太难了”

希望未来的中国越来越好&#xff0c;大家的生活也越来越好 老人是1955年在河南省洛阳市洛宁县的一个小山村里出生的&#xff0c;前半辈子为了生活&#xff0c;为了孩子而打拼&#xff0c;虽然经历了不少的苦难&#xff0c;但后半辈子也算是苦尽甘来&#xff0c;生活美满。现在就…

《Is dataset condensation a silver bullet for healthcare data sharing?》

一篇数据浓缩在医疗数据集应用中的论文。 其实就是在医疗数据集上使用了data condensation的方法&#xff0c;这里使用了DM的方式&#xff0c;并且新增了浓缩时候使用不同的网络。 1. 方法 数据浓缩DC的目的是&#xff1a; E x ∼ P D [ L ( φ θ O ( x ) , y ) ] ≃ E x ∼…

【Vue3+Vite】Vue3视图渲染技术 快速学习 第二期

文章目录 一、模版语法1.1 插值表达式和文本渲染1.1.1 插值表达式 语法1.1.2 文本渲染 语法 1.2 Attribute属性渲染1.3 事件的绑定 二、响应式基础2.1 响应式需求案例2.2 响应式实现关键字ref2.3 响应式实现关键字reactive2.4 扩展响应式关键字toRefs 和 toRef 三、条件和列表渲…

考研高数(共轭根式)

1.定义 共轭根式&#xff1a;是指两个不等于零的根式A、B&#xff0c;若它们的积AB不含根式&#xff0c;则称A、B互为共轭根式。 共轭根式的一个显著特点是通过相乘能把根号去掉&#xff0c;这是很有帮助的 2.常用的共轭根式 3.例题 1&#xff09;求极限 2&#xff09;证明…

常见分类网络的结构

VGG16 图片来自这里 MobilenetV3 small和large版本参数,图片来着这里 Resnet 图片来自这里

【Deep Dive: AI Webinar】数据合作和开源人工智能

【深入探讨人工智能】网络研讨系列总共有 17 个视频。我们按照视频内容&#xff0c;大致上分成了 3 个大类&#xff1a; 1. 人工智能的开放、风险与挑战&#xff08;4 篇&#xff09; 2. 人工智能的治理&#xff08;总共 12 篇&#xff09;&#xff0c;其中分成了几个子类&…

02、全文检索 ------ Solr(企业级的开源的搜索引擎) 的下载、安装、Solr的Web图形界面介绍

目录 Solr 的下载和安装Solr的优势&#xff1a;Lucene与Solr 安装 Solr1、下载解压2、添加环境变量3、启动 Solr Solr 所支持的子命令&#xff1a;Solr 的 Core 和 Collection 介绍Solr 的Web控制台DashBoard&#xff08;仪表盘&#xff09;Logging&#xff08;日志&#xff09…

代码随想录算法训练营29期|day34 任务以及具体任务

第八章 贪心算法 part03 1005.K次取反后最大化的数组和 class Solution {public int largestSumAfterKNegations(int[] nums, int K) {// 将数组按照绝对值大小从大到小排序&#xff0c;注意要按照绝对值的大小nums IntStream.of(nums).boxed().sorted((o1, o2) -> Math.ab…

华为1.24秋招笔试题

华为1.24秋招笔试题 1.题目1 题目详情 - 2024.1.24-华为秋招笔试-第一题-计算积分 - CodeFun2000 1.1题解 import java.util.Scanner;class Main{public static void main(String[] args){Scanner scnew Scanner(System.in);String ssc.next();char[] chs.toCharArray();in…

qt语言国际化(翻译),并实现多窗口同时翻译

一、.pro文件中添加支持的语言 在.pro文件中添加下面几句&#xff0c;支持中文和英文 TRANSLATIONS lanague_cn.ts\lanague_en.ts二、通过qt语言家更新翻译生成.ts文件 完成以后在工程目录可以看到.ts文件 三、通过linguist翻译文件 打开文件 将两个文件同时选中&#xf…

【WPF.NET开发】优化性能:图形呈现层

本文内容 图形硬件呈现层定义其他资源 呈现层为运行 WPF 应用程序的设备定义图形硬件功能和性能级别。 1、图形硬件 对呈现层级别影响最大的图形硬件功能包括&#xff1a; 视频 RAM - 图形硬件中的视频内存量决定了可用于合成图形的缓冲区大小和数量。 像素着色器 - 像素着…

【优秀案例】回本周期缩短10%!日安装量级高达5000以上!看NetMarvel如何赋能Ball Sort达成多项目标

“合成大西瓜在海外火了” 没想到&#xff0c;在国内已经过气的玩法转战到海外后&#xff0c;还能够翻红的这么彻底&#xff1f; 实际上&#xff0c;市面上很多在本土市场不温不火但转战海外赛道却盈利感人的应用不在少数&#xff0c;比如我们今天的重头戏《Ball Sort - Colo…

【云上建站】快速在云上构建个人网站4——网站备案

快速在云上构建个人网站4——网站备案 一、为网站配置域名1、使用域名的原因2、域名使用逻辑3、域名配置流程 二、域名注册1、查询域名&#xff1a;2、确认订单&#xff1a;3、实名认证域名4、域名解析配置解析域名&#xff1a;解析设置&#xff1a;访问域名&#xff1a; 一、为…

【深度学习:多关节嵌入模型】 Meta 解释的 ImageBind 多关节嵌入模型

【深度学习&#xff1a;多关节嵌入模型】 Meta 解释的 ImageBind 多关节嵌入模型 Meta 发布开源人工智能工具的历史分段任何模型DINOv2 什么是多模态学习&#xff1f;什么是嵌入&#xff1f;什么是 ImageBind&#xff1f;集成在 ImageBind 中的模式图像绑定架构特定模式编码器跨…

Flask框架开发学习笔记《6》前后端不分离基础框架

Flask框架开发学习笔记《6》前后端不分离基础框架 Flask是使用python的后端&#xff0c;由于小程序需要后端开发&#xff0c;遂学习一下后端开发。 主要包含如下文件&#xff1a; static 目录中存储了图片templates 目录中存储了 html 文件utils.py 包含了 log 函数server.p…

资深Android逆袭、华为鸿蒙为安卓程序员开辟了一条新道路

本文章主要从以下5个方面来展开聊聊这个话题&#xff1a; 1.什么是鸿蒙 2.鸿蒙系统发展时间线 3.鸿蒙是套壳Android吗&#xff1f; 4.鸿蒙的生态&#xff08;用户以及开发者&#xff09; 5.一些建议 1月18日&#xff0c;在鸿蒙生态千帆启航仪式上&#xff0c;华为宣布了继鸿蒙4…

实现单点登录

指再多系统应用群中登录一个系统&#xff0c;便可在其他所有系统中得到授权而无需再次登录&#xff0c;包括单点登录与单点注销两部分。 相比于单系统登录&#xff0c;sso需要一个独立的认证中心&#xff0c;只有认证红心能接受用户的用户名密码等安全信息&#xff0c;其他系统…

C#,打印漂亮的贝尔三角形(Bell Triangle)的源程序

以贝尔数为基础&#xff0c;参考杨辉三角形&#xff0c;也可以生成贝尔三角形&#xff08;Bell triangle&#xff09;&#xff0c;也称为艾特肯阵列&#xff08;Aitkens Array&#xff09;&#xff0c;皮埃斯三角形&#xff08;Peirce Triangle&#xff09;。 贝尔三角形的构造…