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

拿到表达矩阵之后,如何使用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))


  
  
  

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

CPU、GPU,那NPU是,神经网络到底能做什么!

人工智能时代即将到来。随着人工智能的不断推进&#xff0c;英特尔、AMD和高通等公司也在着眼于各种硬件配置方面。随着NPU&#xff08;神经网络处理器&#xff09;的引入&#xff0c;人工智能的应用过程将被加快。 苹果在其芯片中使用NPU已经很多年了&#xff0c;所以NPU并不是…

《深入Linux内核架构》第4章 进程虚拟内存(2)

目录 4.3 内存映射原理 4.4 数据结构 4.4.1 树和链表 4.4.2 虚拟内存区域VMA的表示 4.4.3 相关数据结构 本专栏文章将有70篇左右&#xff0c;欢迎关注&#xff0c;查看后续文章。 本节讲VMA结构体struct vm_area_struct和struct address_space。 4.3 内存映射原理 所有进…

k8s概述及核心组件

一、k8s概述 1.1 引言 docker compose 单机编排工具 有企业在用 docker swarm 能够在多台主机中构建一个docker集群 基本淘汰集群化管理处理工具 容器 微服务封装 dockerfile 编写成镜像 然后进行发布 dockerfile 可以写成shell脚本&#xff08;函数做调…

【Linux网络编程】HTTPS协议

【Linux网络编程】HTTPS协议 目录 【Linux网络编程】HTTPS协议HTTPS介绍加密常见的加密方式HTTPS的工作过程探究&#xff08;重点&#xff09;常见问题完整流程总结 作者&#xff1a;爱写代码的刚子 时间&#xff1a;2024.5.9 前言&#xff1a;本篇博客将会介绍HTTPS协议 HTTPS…

【记录】常见的前端设计系统(Design System)

解释一下设计系统的定义&#xff0c;以及在国内&#xff0c;都有那些优秀的设计系统可以学习&#xff0c;希望可以帮到大家。 什么是设计系统&#xff08;Design System)&#xff1f; 设计系统&#xff08;Design System&#xff09;是一套综合性的指导原则、组件和规则&…

VBA技术资料MF152:列出工作表中所有单元格的注释

我给VBA的定义&#xff1a;VBA是个人小型自动化处理的有效工具。利用好了&#xff0c;可以大大提高自己的工作效率&#xff0c;而且可以提高数据的准确度。“VBA语言専攻”提供的教程一共九套&#xff0c;分为初级、中级、高级三大部分&#xff0c;教程是对VBA的系统讲解&#…

Linux进程——Linux环境变量

前言&#xff1a;在结束完上一篇的命令行参数时&#xff0c;我们简单的了解了一下Linux中的环境变量PATH&#xff0c;而环境变量不只有PATH&#xff0c;关于更多环境变量的知识我们将在本篇展开&#xff01; 本篇主要内容&#xff1a; 常见的环境变量 获取环境变量的三种方式 本…

GORM数据库连接池对接Prometheus

一、背景与介绍 Golang的database/sql包定了关于操作数据库的相关接口&#xff0c;但是没有去做对应数据库的实现。这些实现是预留给开发者或者对应厂商进行实现的。 其中让我比较关注的是Golang的sql包有没有实现连接池pool的机制呢? 毕竟Golang是静态语言&#xff0c;类似J…

pwn(一)前置技能

以下是pwn中的题目&#xff08;漏洞&#xff09;类型&#xff1a; 关于pwn的学习&#xff1a; 一.什么是pwn&#xff1f;&#xff08;二进制的漏洞&#xff09; "Pwn"是一个俚语&#xff0c;起源于电子游戏社区&#xff0c;经常在英语中用作网络或电子游戏文化中的…

AI中转站计费平台系统源码一站式解决方案安装说明

AI中转站计费平台系统源码一站式解决方案安装说明 功能 | Features AI 联网功能 AI online searching service 多账户均衡负载 Multi-account load balancing HTTP2 Stream 实时响应功能 HTTP2 Stream real-time response function 节流和鉴权体系 Throttling and authenticati…

GitHub中Asterank源码python修改成C++(本人python不太会)

GitHub - typpo/asterank: asteroid database, interactive visualizations, and discovery tools 主要目的是在进行多元线性回归的时候将枚举型转换为数值型 python: # # The constants used in calculations for the values of asteroids. ## General constants GENERAL_I…

基于Detectron2的计算机视觉实践

书籍&#xff1a;Hands-On Computer Vision with Detectron2: Develop object detection and segmentation models with a code and visualization approach 作者&#xff1a;Van Vung Pham&#xff0c;Tommy Dang 出版&#xff1a;Packt Publishing 书籍下载-《基于Detectr…

.OpenNJet应用引擎实践——从 0-1 体验感受

目录 一. &#x1f981; 写在前面二. &#x1f981; 安装使用2.1 安装环境2.2 配置yum源2.3 安装软件包2.4 编译代码2.5 启动 三. &#x1f981; 使用效果3.1 编辑配置文件3.2 编辑 HTML 代码 四. &#x1f981; 使用感受 一. &#x1f981; 写在前面 现在互联网体系越来越往云…

小丑的身份证和复印件 (BFS + Floyd)

本题链接&#xff1a;登录—专业IT笔试面试备考平台_牛客网 题目&#xff1a; 样例&#xff1a; 输入 2 10 (JOKERjoke #####asdr) 输出 12 思路&#xff1a; 根据题意&#xff0c;要求最短时间&#xff0c;实际上也可以理解为最短距离。 所以应该联想到有关最短距离的算法&…

css z-Index 详解--子元素盖在父元素的兄弟元素上

前置知识 1、z-index 只有在定位元素上才会生效&#xff08;即非static定位的元素上&#xff09; 2、同级元素&#xff0c;无论是z-index 相同还是没设置。后面的元素层级比前面 3、元素上有 transform 属性 z-index 会失效 dom结构如下 // dom部分 <div><div id&quo…

latex algorithm2e 库学习总结

案例1 \documentclass{article}\usepackage{xeCJK} \usepackage[]{algorithm2e} %\usepackage{ctex} % 中文包\begin{document}\renewcommand{\algorithmcfname}{算法} % 把标题设置为“算法” \begin{algorithm…

html table thead打印时带重复表头不生效

今天做一个打印功能时要求每页都带相同的表头&#xff0c;使用的方式是table的thead标签来实现&#xff0c;结果发现thead里边的内容放多了之后只有第一页才会有表头。最后发现问题是 thead的内容不能超过table的25%。

实例分割——Mask R-CNN、YOLOV8、RTMDET、DeepLab四种实例分割算法比对

1.概述 1.1 语义分割与实例分割 实例分割和语义分割都是计算机视觉领域中图像分割的任务&#xff0c;它们在目标和方法上有一些区别&#xff1a; 语义分割&#xff1a; 语义分割的目标是对图像中的每个像素打上类别标签&#xff0c;即识别出图像中每个像素属于哪个预定义的…

云动态摘要 2024-05-09

给您带来云厂商的最新动态&#xff0c;最新产品资讯和最新优惠更新。 最新优惠与活动 [免费试用]即刻畅享自研SaaS产品 腾讯云 2024-04-25 涵盖办公协同、营销拓客、上云安全保障、数据分析处理等多场景 云服务器ECS试用产品续用 阿里云 2024-04-14 云服务器ECS试用产品续用…

YOLOv5,YOLOv7改进之结合​SOCA

1.SOCA moudle结构图 2,YOLOv5,YOLOv7改进之结合​SOCA 1.配置common.py文件 #SOCA moudle 单幅图像超分辨率 class Covpool(Function):@staticmethoddef forward(ctx, input):x = inputbatchSize = x.data.shape[0]dim = x.data.shape[1]h = x.data.shape[2]w = x.data.sha…