【生信技能树】拿到表达矩阵之后,如何使用ggplot2绘图系统绘制箱线图?

news2024/11/28 12:41:57

拿到表达矩阵之后,如何使用ggplot2绘图系统绘制箱线图?

目录

预备知识

绘制箱线图示例


预备知识

1.pivot_longer函数

pivot_longer 是tidyr包中的一个函数,用于将数据框(data frame)从宽格式转换为长格式。在宽格式数据中,每个观测值可能是多列的行,而长格式数据则将这些多列转换为两列:一个包含观测值的变量,另一个包含相应的值。

以下是pivot_longer的基本语法和主要参数:

pivot_longer(data, cols, names_to = NULL, values_to = "value")
  • data:要转换的数据框。
  • cols:要转换为长格式的列,可以是一个单独的列名,也可以是一个包含多个列名的向量。可以使用c()函数来指定多个列。
  • names_to:新变量名称的列名。可以是一个字符串,或者一个包含字符串的向量,用于指定转换后的列名。
  • values_to:新数值列的列名,默认为"value"。

2.starts_with()函数

starts_with()是dplyr包中的函数,用于在数据操作中筛选出以特定字符串开始的列。

以下是starts_with()函数的基本语法和参数:

starts_with(x, prefix, ignore.case = FALSE)
  • x:一个字符向量,即你要检查的列。
  • prefix:一个字符串,表示你想要匹配的前缀。
  • ignore.case:一个逻辑值,指定是否忽略大小写进行匹配。默认为FALSE,即默认情况下是区分大小写的。

通常只需要传入参数prefix也就是想要匹配的前缀即可。这个函数不能单独使用,而是作为某些函数的参数来使用,单独使用会报这样的一个错误

说是这个函数必须配合一种selecting函数来使用,比如select函数,pivot_longer函数等。举个例子

select(df,starts_with("name"))

表示筛选出df数据框中有前缀是name的列,结果仍然是数据框。

绘制箱线图示例

首先运行代码

set.seed(10086)
exp<-matrix(round(rnorm(18),2),ncol = 6)
rownames(exp)<-paste0("gene",1:3)
colnames(exp)<-paste0("test",1:6)
exp[,1:3]<-exp[,1:3]+1

生成一个三行六列的矩阵,设置种子数是为了让产生的随机数可重复。然后对这个矩阵的行名和列名进行了修改。exp[,1:3]

其中行表示不同的基因,列表示不同的样本,对于这样一个矩阵,是不能扔到ggplot函数里面画箱线图的,因为首先函数要求的数据格式是数据框,我们得到的是矩阵,那是不是直接把这个表达矩阵转换成数据框就能扔进ggplot函数里面绘制箱线图了?我们先来看一下使用ggplot函数绘制箱线图的语法格式:

ggplot(数据框)+ geom_boxplot(aes(列名,列名))

基本的要求是数据框中两列的列名,第一个列名用作自变量(x),第二个列名用作因变量(y),再来看我们现在的矩阵,如果直接把他转换成数据框,其实内容没有变化,但是我们要怎么给geom_boxplot函数传参?传哪两列都不合适,正确处理方式如下:

1.使用t函数转置表达矩阵,并使用as.data.frame函数把这个矩阵转换成数据框。

2.使用rownames_to_column把原来的行名变成第一列,因为我们要根据基因名这一列和后面搞出来的表达量那列绘图。

3.使用mutate函数增加一列,通常命名为group,这一列的内容通常为健康和患病。这是为了在箱线图中显示图例。经过这一步之后我们的数据框如图,假设这个数据框名为dat,也可以不使用mutate函数,直接dat$group

4.使用pivot_longer函数把这个数据框“宽变长”,得到我们需要的数据框。所谓的宽变长是指:原来每个test都有其对应的gene1,2,3,现在我想要把带gene的这些列都合成一列,假设这一列叫做gene,同时要能够让test1,gene1唯一的确定一个基因表达量,就只能把test1,test2等等这些带test的每一个都变成三个,也就是下图中这样子

在这张表中我们仍然可以通过test1和gene1唯一的确定一个表达量,由于行数的变化,表达量也要用新的一列来存起来,比如表格里面的count就是我们新创建的一列。完成这一系列操作只需要使用一个函数,他就是 pivot_longer,这样传参

pdat<-dat%>%
    pivot_longer(cols = starts_with("gene"),
                 names_to = "gene",
                 values_to = "count")

管道符用于把前面的参数传到后面去,默认是传到后面函数的第一个参数位置上去。其中start_with("gene")是用来筛选出以gene开头的列,如果要筛选的基因没有这样gene1,gene2的,而是三个基因的名字,我们可以直接给cols参数写2:4,names_to=“gene”表示指定的这三列合成的新的那一列名字叫做gene,同时原来由test1和gene1这样的两个维度唯一确定的那些基因的表达量由于格式的变化也要创建新的一列来存起来,这一列我们给他起名为count。

5.使用ggplot函数绘制箱线图。

示例代码:

library(ggplot2)
ggplot(pdat,aes(gene,count))+
    geom_boxplot(aes(fill=group))

表示横坐标是gene这一列,纵坐标是count这一列,填充颜色由group这一列的取值来决定。

运行代码之后就绘制了这样一张图

最后送上完整源代码,可以直接运行

set.seed(10086)
exp<-matrix(round(rnorm(18),2),ncol = 6)
rownames(exp)<-paste0("gene",1:3)
colnames(exp)<-paste0("test",1:6)
exp[,1:3]<-exp[,1:3]+1
library(tidyr)
library(tibble)
library(dplyr)
dat<-t(exp)%>%
  as.data.frame()%>%
  rownames_to_column()%>%
  mutate(group=rep(c("control","treat"),each=3))
pdat<-dat%>%
  pivot_longer(cols = starts_with("gene"),
               names_to = "gene",
               values_to = "count")
library(ggplot2)
ggplot(pdat,aes(gene,count))+
  geom_boxplot(aes(fill=group))


  
  
  

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

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

相关文章

AI游戏外挂为何违法?

尊敬的读者们&#xff0c;大家好&#xff01;今天我想和大家探讨一个备受争议的话题——AI游戏外挂的合法性。近年来&#xff0c;随着人工智能技术的飞速发展&#xff0c;AI外挂逐渐成为游戏领域的一大毒瘤。那么&#xff0c;为什么AI游戏外挂会被视为违法行为呢&#xff1f;本…

inline和static底层浅析

找一段代码来底层分析 #include<iostream> using namespace std;inline int add(int a, int b) {return a + b

【Java】入门

笔者是在C语言基础上学习java 安装Java的过程中我们可能会见到这样几个东西&#xff0c;JVM、JRE、JDK&#xff0c;那它们的关系是怎样的呢&#xff1f; -JVM Java Virtual Machine 是Java虚拟机&#xff0c;Java程序需要运行在虚拟机上&#xff0c;不同的平台有自己的虚拟机…

Hack The Box-SolarLab

总体思路 SMB获取敏感信息->CVE-2023-33733漏洞注入->CVE-2023-32315->敏感信息泄露 信息收集&端口利用 nmap -sSVC -p1-10000 10.10.11.16发现目标开放了80、135、139、445和6791端口&#xff0c;并且对应的端口也给出了重定向的标志&#xff0c;将域名加入到…

MySQL学习3

目录 一.合计/统计函数&#xff1a; 1.合计函数--count&#xff1a; 2.合计函数-sum 3.合计函数-avg 4.合计函数--max/min 二.分组统计&#xff1a; &#xff08;1&#xff09;使用group by子句对列进行分组&#xff1a; &#xff08;2&#xff09;使用having子句对分组…

Linux下Telemac-Mascaret源码编译安装及使用

目录 软件介绍 基本依赖 其它可选依赖 一、源码下载 二、解压缩 三、编译安装 3.1 修改环境变量设置文件 3.2 修改配置文件 3.3 编译安装 四、算例运行 软件介绍 TELEMAC-MASCARET是法国电力集团(EDF)的法国国立水利与环境实验室开发的一款研究水动力学和水文学领域的…

0509BBQ的Maven项目

0509BBQ的Maven项目包-CSDN博客 数据库字段 登录界面 点餐主页 登录完成进入点餐主页&#xff0c;显示已点餐的数据 点击点餐按钮&#xff0c;生成对应订单数据。 取消勾选点餐按钮&#xff0c;删除对应订单数据。 点击加减图片&#xff0c;实现对数量的加减 展示订单 ajax动态…

嵌入式学习67-C++(多线程,自定义信号合槽,串口通信)

知识零碎&#xff1a; GPS传感器获取到的 经纬度信息并不是真实的物理坐标&#xff0c;还需要转换 signals&#xff1a; …

Dread Hunger 海上狼人杀服务器开服教程

1、购买后登录服务器&#xff0c;百度莱卡云 1.1、第一次购买服务器会安装游戏端&#xff0c;大约5分钟左右&#xff0c;如果长时间处于安装状态请联系客服 2、创建端口 点击网络创建第二个端口作为副端口&#xff08;副端口的作用是用于第二局游戏&#xff0c;因为游戏BUG&am…

Android 老年模式功能 放大字体

1 配置属性 <attr name"text_size_16" format"dimension"/><attr name"text_size_18" format"dimension"/><attr name"text_size_14" format"dimension"/><attr name"text_size_12&quo…

作为有伦敦金交易技巧的人,最后都怎么样了?

伦敦金投资者如果不懂技术分析&#xff0c;就好比航海家看不懂地图&#xff0c;钢琴家看不懂五线谱。掌握一些常用而有效的分析技巧&#xff0c;可以帮助伦敦金投资者更好地预测市场走势&#xff0c;做出更明智的投资决策...... 对于新手伦敦金投资者来说&#xff0c;学习如何识…

2024电商数据资料汇总

2024年跨境电商&#xff1a;连接全球市场的新纪元 随着全球数字化进程的不断推进&#xff0c;跨境电商已经成为了国际贸易的重要组成部分。2024年&#xff0c;跨境电商行业迎来了一系列挑战和机遇&#xff0c;塑造了全新的市场格局。 跨境电商市场规模的持续扩大 2024年&…

[猫头虎分享21天微信小程序基础入门教程]第7天:小程序的权限与API使用

第7天&#xff1a;小程序的权限与API使用 &#x1f510; 自我介绍 大家好&#xff0c;我是猫头虎&#xff0c;一名全栈软件工程师。今天我们将继续微信小程序的学习&#xff0c;重点了解如何使用微信小程序的API&#xff0c;以及如何管理和请求小程序的权限。通过这些知识&am…

五子棋对战(网页版)

目录 一、项目背景 用户模块 匹配模块 对战模块 二、核心技术 三、相关知识 WebSocket 原理 报文格式 代码 服务器代码 客户端代码 四、项目创建 4.1、实现用户模块 编写数据库代码 数据库设计 配置MyBatis 创建实体类 创建UserMapper 创建UserMapper接口 实现UserMapper.xml 前…

深度解析循环购模式:让消费更有价值

大家好&#xff0c;我是吴军&#xff0c;今天我非常高兴能和大家分享一个充满活力和创新的商业模式——循环购模式。可能大家都听过消费达到一定金额就有现金返还的活动&#xff0c;但这种返还通常都伴随着各种条件和限制。而循环购模式&#xff0c;它不仅仅是一个简单的返利机…

Excel 两层分类后的行转列

例题描述 Excel 文件中有下图所示的数据&#xff0c;同 Name 的物品可能有多种颜色。 现在想要把数据列出下图的形式&#xff0c;每种Type一行&#xff0c;其后依次列出每种Name及其Color。 实现方法 使用 Excel 插件 SPL XLL 在空白单元格写入公式&#xff1a; spl("…

模型 洋葱模型(组织文化方向)

系列文章 分享 模型&#xff0c;了解更多&#x1f449; 模型_思维模型目录。层层深入&#xff0c;探索核心。 1 洋葱模型的应用 1.1 洋葱模型用于职业规划 有一个名叫李明的大学生&#xff0c;他最近感到迷茫和压力&#xff0c;因为他即将毕业并面临职业选择。李明决定寻求心…

光伏EPC管理软件都有哪些功能和作用?

光伏EPC管理软件是用于光伏工程项目管理的综合性工具&#xff0c;它涵盖了从项目策划、设计、采购、施工到运维的各个环节。 1、项目总览 管理所有项目计划&#xff0c;包括项目类型、项目容量等。 调整和优化项目计划&#xff0c;以应对不可预见的情况。 2、施工管理 制定…

JVM调优:JVM运行时数据区详解

一、前言 Java运行时数据区域划分&#xff0c;Java虚拟机在执行Java程序时&#xff0c;将其所管理的内存划分为不同的数据区域&#xff0c;每个区域都有特定的用途和创建销毁的时间。 其中&#xff0c;有些区域在虚拟机进程启动时就存在&#xff0c;而有些区域则是随着用户线程…

【数据结构】二叉排序树(查找+插入+删除+效率分析)完整代码+解析

3.1 二叉排序树 3.1.1 定义 二叉排序树的定义 又称二叉查找树&#xff08;BST&#xff0c;Binary Search Tree&#xff09; 二叉排序树是具有以下性质的二叉树&#xff1a; 左子树结点值<根结点值<右子树结点值 进行中序遍历&#xff0c;可以得到一个递增的有序序列。 3…