【生信技能樹】拿到表達矩陣之后,如何使用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))

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/11241.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/11241.shtml
英文地址,請注明出處:http://en.pswp.cn/web/11241.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

一文掌握gRPC

文章目錄 1. gRPC簡介2. Http2.0協議3. 序列化-Protobuf4. gRPC開發實戰環境搭建5. gRPC的四種通信方式&#xff08;重點&#xff09;6. gRPC的代理方式7. SprintBoot整合gRPC 1. gRPC簡介 gRPC是由google開源的高性能的RPC框架。它是由google的Stubby這樣一個內部的RPC框架演…

reactJs動態執行js代碼

參考了這篇文章 js——new Function 一個可以隨時動態執行字符串js代碼的神器 因為一些原因&#xff0c;想要js代碼塊配置在數據庫中返回&#xff0c;例如時間&#xff0c;我需要用到第三方庫 moment。然后動態的得到startDate 和 endDate 配置在數據庫中的startDate值是$mom…

Java日志總結

開發中&#xff0c;日志記錄是不可或缺的一部分&#xff0c;應用日志的記錄主要用于&#xff1a;記錄操作軌跡數據、監控系統運行情況、系統故障定位問題&#xff0c;日志的重要性不言而喻&#xff0c;想要快速定位問題&#xff0c;日志分析是個重要的手段&#xff0c;Java也提…

JAVA 集合(單列集合)

集合框架 1.集合的特點 a.只能存儲引用數據類型的數據 b.長度可變 c.集合中有大量的方法,方便我們操作 2.分類: a.單列集合:一個元素就一個組成部分: list.add(“張三”) b.雙列集合:一個元素有兩部分構成: key 和 value map.put(“濤哥”,“金蓮”) -> key,value叫做鍵值…

Docker各版本的新特性

Docker 作為流行的容器化平臺&#xff0c;會定期發布新版本以引入新特性、改進和修復。根據提供的搜索結果&#xff0c;以下是一些 Docker 版本及其新特性的概覽&#xff1a; Docker Desktop v4.12 Containerd 的集成&#xff1a;更深入集成 containerd 以管理容器生命周期&a…

鎖和MVCC如何實現mysql的隔離級別

概述 MVCC解決讀的隔離性&#xff0c;加鎖解決寫的隔離性。 讀未提交 讀未提交&#xff0c;更新數據大概率使用的是獨享鎖吧。 讀已提交 在 Read Committed&#xff08;讀已提交&#xff09;隔離級別下&#xff0c;每次執行讀操作時都會生成一個新的 read view。這是因為在讀…

英譯漢早操練-(二十)

hello大家好&#xff0c;這篇跟隨十九&#xff0c;繼續真題學習。如果想看全部請返回到第十九篇。 英譯漢早操練-&#xff08;十九&#xff09;-CSDN博客 The political upheaval in Libya and elsewhere in North Africa has opened the way for thousands of new migrants to…

【C++學習第15天】STL

一、種類 vector&#xff1a;變長數組&#xff0c;倍增的思想。給數組申請空間所耗費的時間取決于申請次數&#xff0c;而不是申請空間的大小&#xff0c;即a[1]和a[10000]兩個數組的申請時間是基本一致的。pair<int, string>&#xff1a;存儲一個二元組&#xff0c;前后…

AI 圖像生成-環境配置

一、python環境安裝 Windows安裝Python&#xff08;圖解&#xff09; 二、CUDA安裝 CUDA安裝教程&#xff08;超詳細&#xff09;-CSDN博客 三、Git安裝 git安裝教程&#xff08;詳細版本&#xff09;-CSDN博客 四、啟動器安裝 這里安裝的是秋葉aaaki的安裝包 【AI繪畫…

【GlobalMapper精品教程】081:WGS84/CGCS2000轉Lambert投影

參考閱讀:ArcGIS實驗教程——實驗十:矢量數據投影變換 文章目錄 一、加載實驗數據二、設置輸出坐標系三、數據導出一、加載實驗數據 打開配套案例數據包中的data081.rar中的矢量數據,如下所示: 查看源坐標系:雙擊圖層的,圖層投影選項卡,數據的已有坐標系為WGS84地理坐標…

MySQL創建存儲過程函數

DDL CREATE TABLE student (id int(11) NOT NULL AUTO_INCREMENT COMMENT 學號,createDate datetime DEFAULT NULL,userName varchar(20) DEFAULT NULL,pwd varchar(36) DEFAULT NULL,phone varchar(11) DEFAULT NULL,age tinyint(3) unsigned DEFAULT NULL,sex char(2) DEFAU…

[初學rust] 05_ rust struct

rust struct 其實這也算復合類型&#xff0c;但是其他語言都有&#xff0c;所以抽取出來單獨看的時候會很簡單&#xff0c;更容易學 1. 定義結構體 結構體的定義和其他語言沒啥區別。 struct User {name: String,age: i32, }2. 創建實例 創建實例的過程就跟js類似 let us…

【3dmax筆記】021:對齊工具(快速對齊、法線對齊、對齊攝影機)

文章目錄 一、對齊二、快速對齊三、法線對齊四、對齊攝影機五、注意事項3dmax提供了對齊、快速對齊、法線對齊和對齊攝像機等對齊工具: 對齊工具選項: 下面進行一一講解。 一、對齊 快捷鍵為Alt+A,將當前選擇對象與目標對象進行對齊。 最大對最大:

【小筆記】neo4j用load csv指令導入數據

【小筆記】neo4j用load csv指令導入數據 背景 很久沒有用load CSV的方式導入過數據了因為它每次導入有數量限制&#xff08;印象中是1K還是1W&#xff09;&#xff0c;在企業中構建的圖譜往往都是大規模的&#xff0c;此時通常采用的是Neo4j-admin import方式。最近遇到了一些…

振弦式表面應變計怎么安裝

振弦式表面應變計是一種用于測量結構表面應變的高精度傳感器&#xff0c;廣泛應用于工程和科研領域。正確安裝振弦式表面應變計對于確保測量結果的準確性至關重要。以下是安裝振弦式表面應變計的步驟和注意事項&#xff1a; 1. 準備工作 在開始安裝前&#xff0c;需要準備以下工…

whisper之初步使用記錄

文章目錄 前言 一、whisper是什么&#xff1f; 二、使用步驟 1.安裝 2.python調用 3.識別效果評估 4.一點封裝 5.參考鏈接 總結 前言 隨著AI大模型的不斷發展&#xff0c;語音識別等周邊內容也再次引發關注&#xff0c;通過語音轉文字再與大模型交互&#xff0c;從而…

【Gitlab遠程訪問本地倉庫】Gitlab如何安裝配置并結合內網穿透實現遠程訪問本地倉庫進行管理

文章目錄 前言1. 下載Gitlab2. 安裝Gitlab3. 啟動Gitlab4. 安裝cpolar5. 創建隧道配置訪問地址6. 固定GitLab訪問地址6.1 保留二級子域名6.2 配置二級子域名 7. 測試訪問二級子域名 前言 GitLab 是一個用于倉庫管理系統的開源項目&#xff0c;使用Git作為代碼管理工具&#xf…

為什么質量工程師必學六西格瑪?突破職業發展的瓶頸?

在質量管理領域工作多年&#xff0c;你是否曾感受到事業發展的停滯不前&#xff1f;3年、5年的職業生涯&#xff0c;薪水依舊停留在每月5000-7000&#xff0c;而同行業的其他人卻能月入2-3萬&#xff0c;這種差距讓人不禁陷入深思。 問題究竟出在哪里&#xff1f;為什么我們的…

編譯OpenResty遇到找不到OpenSSL的解決辦法

以OpenResty-1.19.9.1為例 編輯openresty-1.19.9.1/build/nginx-1.19.9/auto/lib/openssl/conf CORE_INCS"$CORE_INCS $OPENSSL/.openssl/include" CORE_DEPS"$CORE_DEPS $OPENSSL/.openssl/include/openssl/ssl.h" CORE_LIBS"$CORE_LIBS $OPENSSL/.…

揭秘圖形編程 動靜接口如何助力 AGV 集成

在公司軟件開發團隊的辦公室里&#xff0c;陽光透過窗戶灑在排列整齊的辦公桌上。臥龍坐在辦公桌前&#xff0c;面前攤開一份內測報告&#xff0c;他的手指時不時地敲擊著桌面&#xff0c;流露出內心的煩躁。他抬起頭&#xff0c;眼神中透露出一絲困惑&#xff0c;看向正在文件…