1. 程式人生 > >熱圖繪製heatmap

熱圖繪製heatmap

生成測試資料 繪圖首先需要資料。通過生成一堆的向量,轉換為矩陣,得到想要的資料。
data <- c(1:6, 6:1, 6:1, 1:6, (6:1)/10, (1:6)/10, (1:6)/10, (6:1)/10, 1:6, 6:1, 6:1, 1:6, 6:1, 1:6, 1:6, 6:1)

[1] 1.0 2.0 3.0 4.0 5.0 6.0 6.0 5.0 4.0 3.0 2.0 1.0 6.0 5.0
[15] 4.0 3.0 2.0 1.0 1.0 2.0 3.0 4.0 5.0 6.0 0.6 0.5 0.4 0.3
[29] 0.2 0.1 0.1 0.2 0.3 0.4 0.5 0.6 0.1 0.2 0.3 0.4 0.5 0.6
[43] 0.6 0.5 0.4 0.3 0.2 0.1 1.0 2.0 3.0 4.0 5.0 6.0 6.0 5.0
[57] 4.0 3.0 2.0 1.0 6.0 5.0 4.0 3.0 2.0 1.0 1.0 2.0 3.0 4.0
[71] 5.0 6.0 6.0 5.0 4.0 3.0 2.0 1.0 1.0 2.0 3.0 4.0 5.0 6.0
[85] 1.0 2.0 3.0 4.0 5.0 6.0 6.0 5.0 4.0 3.0 2.0 1.0

注意:運算子的優先順序
> 1:3+4
[1] 5 6 7
> 1:(3+4)
[1] 1 2 3 4 5 6 7
Vector轉為矩陣 (matrix),再轉為資料框 (data.frame)
# ncol 指定列數
# byrow 先按行填充資料
# ?matrix 可檢視函式的使用方法
# as.data.frame的as系列是轉換用的
data <- as.data.frame(matrix(data, ncol=12, byrow=T))

# 增加列的名字
colnames(data) <- c("Zygote","2_cell","4_cell","8_cell","Morula","ICM","ESC","4 week PGC","7 week PGC","10 week PGC","17 week PGC","OOcyte")
# 增加行的名字
rownames(data) <- paste("Gene", 1:8, sep="_")
# 只顯示前6行和前4列
head(data)[,1:4]
雖然方法比較繁瑣,但一個數值矩陣已經獲得了。 還有另外2種獲取數值矩陣的方式。
  • 讀入字串
# 使用字串的好處是不需要額外提供檔案
# 簡單測試時可使用,寫起來不繁瑣,又方便重複
# 尤其適用於線上提問時作為測試案例
> txt <- "ID;Zygote;2_cell;4_cell;8_cell
+ Gene_1;1;2;3;4
+ Gene_2;6;5;4;5
+ Gene_3;0.6;0.5;0.4;0.4"

# 習慣設定quote為空,避免部分基因名字或註釋中存在引號,導致讀入檔案錯誤。
> data2 <- read.table(text=txt, sep=";", header=T, row.names=1, quote="")
> head(data2)
       Zygote X2_cell X4_cell X8_cell
Gene_1    1.0     2.0     3.0     4.0
Gene_2    6.0     5.0     4.0     5.0
Gene_3    0.6     0.5     0.4     0.4
可以看到列名字中以數字開頭的列都加了X。一般要儘量避免行或列名字以數字開頭,會給後續分析帶去一些困難;另外名字中出現的非字母、數字、下劃線、點的字元都會被轉為點,也需要注意,儘量只用字母、下劃線和數字。
# 讀入時,增加一個引數`check.names=F`也可以解決問題。
# 這次數字前沒有再加 X 了
> data2 <- read.table(text=txt, sep=";", header=T, row.names=1, quote="", check.names = F)
> head(data2)
       Zygote 2_cell 4_cell 8_cell
Gene_1    1.0    2.0    3.0    4.0
Gene_2    6.0    5.0    4.0    5.0
Gene_3    0.6    0.5    0.4    0.4
  • 讀入檔案
與上一步類似,只是改為檔名,不再贅述。
> data2 <- read.table("filename", sep=";", header=T, row.names=1, quote="")
轉換資料格式 資料讀入後,還需要一步格式轉換。在使用ggplot2作圖時,有一種長表格模式是最為常用的,尤其是資料不規則時,更應該使用。
# 如果包沒有安裝,執行下面一句,安裝包
#install.packages(c("reshape2","ggplot2","magrittr"))
library(reshape2)
library(ggplot2)

# 轉換前,先增加一列ID列,儲存行名字
data$ID <- rownames(data)

# melt:把正常矩陣轉換為長表格模式的函式。工作原理是把全部的非id列的數值列轉為1列,命名為value;所有字元列轉為variable列。
# id.vars 列用於指定哪些列為id列;這些列不會被merge,會保留為完整一列。
data_m <- melt(data, id.vars=c("ID"))
head(data_m)
             ID     variable   value 1  Gene_1      Zygote   1.0 2  Gene_2      Zygote   6.0 3  Gene_3      Zygote   0.6 4  Gene_4      Zygote   0.1 5  Gene_5      Zygote   1.0 6  Gene_6      Zygote   6.0 7  Gene_7      Zygote   6.0 8  Gene_8      Zygote   1.0 9  Gene_1      2_cell   2.0 10 Gene_2      2_cell   5.0 11 Gene_3      2_cell   0.5 12 Gene_4      2_cell   0.2 13 Gene_5      2_cell   2.0 14 Gene_6      2_cell   5.0 15 Gene_7      2_cell   5.0 16 Gene_8      2_cell   2.0
分解繪圖 資料轉換後就可以畫圖了,分解命令如下:
# data_m: 是前面費了九牛二虎之力得到的資料表
# aes: aesthetic的縮寫,一般指定整體的X軸、Y軸、顏色、形狀、大小等
# 在最開始讀入資料時,一般只指定x和y,其它後續指定
p <- ggplot(data_m, aes(x=variable,y=ID)) 

# 熱圖就是一堆方塊根據其值賦予不同的顏色,所以這裡使用fill=value, 用數值做填充色。
p <- p + geom_tile(aes(fill=value))

# ggplot2為圖層繪製,一層層新增,儲存在p中,在輸出p的內容時才會出圖。
p
 
## 如果你沒有使用Rstudio或其它R圖形版工具,而是在遠端登入的伺服器上執行的互動式R,需要輸入下面的語句,獲得輸出圖形(圖形儲存於R的工作目錄下的Rplots.pdf檔案中)
熱圖出來了,但有點不對勁,橫軸重疊一起了。一個辦法是調整影象的寬度,另一個是旋轉橫軸標記
# theme: 是處理圖美觀的一個函式,可以調整橫縱軸label的選擇、圖例的位置等
# 這裡選擇X軸標籤45度。
# hjust和vjust調整標籤的相對位置,具體見 
# 簡單說,hjust是水平的對齊方式,0為左,1為右,0.5居中,0-1之間可以取任意值。vjust是垂直對齊方式,0底對齊,1為頂對齊,0.5居中,0-1之間可以取任意值
p <- p + theme(axis.text.x=element_text(angle=45, hjust=1, vjust=1))
p
設定想要的顏色
# 連續的數字,指定最小數值代表的顏色和最大數值賦予的顏色
# 注意fill和color的區別,fill是填充,color只針對邊緣
p <- p + scale_fill_gradient(low = "white", high = "red")
p
調整legend的位置
# postion可以接受的值有 top, bottom, left, right, 和一個座標 c(0.05,0.8) (左上角,座標是相對於圖的左下角計算的)
p <- p + theme(legend.position="top")
調整背景和背景格線以及X軸、Y軸的標題(注意灰色的背景沒了)
p <- p + xlab("samples") + theme_bw() + theme(panel.grid.major = element_blank()) + theme(legend.key=element_blank())
p
合併以上命令,就得到了下面這個看似複雜的繪圖命令
p <- ggplot(data_m, aes(x=variable,y=ID)) + xlab("samples") + theme_bw() + theme(panel.grid.major = element_blank()) + theme(legend.key=element_blank())  + theme(axis.text.x=element_text(angle=45,hjust=1, vjust=1)) + theme(legend.position="top") +  geom_tile(aes(fill=value)) + scale_fill_gradient(low = "white", high = "red")

圖形儲存 圖形出來了,就得考慮儲存了
# 可以跟輸出檔案不同的字尾,以獲得不同的輸出格式
# colormode支援srgb (螢幕)和cmyk (列印,部分雜誌需要,看上去有點褪色的感覺)格式
ggsave(p, filename="heatmap.pdf", width=10, height=15, units=c("cm"),colormodel="srgb")
至此,完成了簡單的heatmap的繪圖。但實際繪製時,經常會碰到由於數值變化很大,導致顏色過於集中,使得圖的可讀性下降很多。因此需要對資料進行一些處理,具體的下次再說。

相關推薦

繪製heatmap

生成測試資料 繪圖首先需要資料。通過生成一堆的向量,轉換為矩陣,得到想要的資料。 data <- c(1:6, 6:1, 6:1, 1:6, (6:1)/10, (1:6)/10, (1:6)/10, (6:1)/10, 1:6, 6:1, 6:1, 1:6, 6:1, 1:6, 1:6,

heatmap繪製時出現樣本列名順序調換

今天像往常一樣,用 ComplexHeatmap包中的 Heatmap函式畫熱圖,本來輸入是正常的 如圖,C12H在左,RTF在右 程式碼也沒啥問題 setwd("F:\\學習檔案存放地址\\IOZ_實驗室\\yangby\\結果檔案\\all_表達矩陣\\") library

R語言繪製Heatmap

熱圖,適合二維資料表的視覺化,數值用顏色顯示。 細活在於調顏色,給人感性的、辨識度高的認識。 nba <- read.csv("d:/ppg2015.csv", sep=",")nba <- nba[order(nba$PTS),]; #按場均得分排名ro

使用matplotlib繪製(heatmap)

python常用的繪相簿就是matplotlib,今天在給公司繪圖時,偶然間發現matplotlib可以繪製熱圖,並且十分簡潔,拿出來跟大家分享一下。(由於涉及到公司資料問題,這裡採用隨機數生成資料進行實驗) import random from matplotlib im

Heatmap.js v2.0 – 最強大的 Web 動態

con gen 簡單的 技術分享 幫助 value ddd 熱圖 htm Heatmap 是用來呈現一定區域內的統計度量,最常見的網站訪問熱力圖就是以特殊高亮的形式顯示訪客熱衷的頁面區域和訪客所在的地理區域的圖示。Heatmap.js 這個 JavaScript 庫可以實現

用R包中heatmap

格式 class IV 語言 log 聚類 主題 實現 過大 一:導入R包及需要畫熱圖的數據 library(pheatmap) data<- read.table("F:/R練習/R測試數據/heatmapdata.txt",head = T,row.names=1

Matplotlib呼叫imshow()函式繪製

https://blog.csdn.net/Eastmount/article/details/73392106?locationNum=5&fps=1 可以使用vmin和vmax來達到和matlab的imshow中[]一樣的效果,將小於vmin的量化成黑色,大於vmax的量化成白色

【python資料探勘課程】十五.Matplotlib呼叫imshow()函式繪製

前面系列文章講過資料探勘的各種知識,最近在研究人類時空動力學分析和冪率定律,發現在人類興趣轉移模型中,可以通過熱圖(斑圖)來進行描述的興趣轉移,如下圖所示。下一篇文章將簡單普及人類動力學相關知識研究。這

使用Python進行層次聚類(一)——基本使用+主成分分析繪圖觀察結果+繪製

Python常用資料探勘的工具包 python對於資料處理非常有好的語言,比如常用的scikit-learn和scipy都可以用來進行機器學習和資料探勘。同時為了使得結果視覺化,Python還提供了非常好用的視覺化工具包matplotlib和seaborn。

R語言繪製——pheatmap

(網易雲課堂,騰訊課堂生物資訊講師,高階生物資訊工程師) pheatmap簡介: Pretty Heatmaps——Implementation of heatmaps that offers mor

matplotlib繪製

# -*- coding: utf-8 -*- import numpy as np import matplotlib.pyplot as plt def plot_heat_map(x,figur

pheatmap繪製”,你需要的都在這

熱圖可以聚合大量的資料,並可以用一種漸進色來優雅地表現,可以很直觀地展現資料的疏密程度或頻率高低。     本文利用R語言 pheatmap 包從頭開始繪製各種漂亮的熱圖。引數像積木,拼湊出你最喜歡的熱圖即可,如下圖:   &

讓數據更精準,神器標配:

uem 用戶體驗 你是否還在因為無法通過大數據精準分析需求而煩惱?你是否還在因為無法直觀呈現用戶的行為而頭大?你是否還在因為怎麽優化頁面布局而愁眉苦臉?正所謂“一圖勝千言”,一張色彩繽紛的圖片甚至可以給人帶來意想不到的收獲,作為監控利器,其新功能“熱圖”可以為您解決這些麻煩!一、掌握用戶習慣,優化界面

一個函數實現基因內具有多種突變類型的的繪制

TP 必須 長度 部分 point 顯示效果 heatmap points bar ??我們平常多見的基因突變熱圖是一個基因一個格子,一種突變類型,但實際上在同一個病人中,同一個基因往往具有多種突變類型,因此傳統的熱圖繪制工具並不能滿足我們繪圖的需要。應研究需要,本人自

matplotlib subplot 子 繪製

總括 MATLAB和pyplot有當前的圖形(figure)和當前的軸(axes)的概念,所有的作圖命令都是對當前的物件作用。可以通過gca()獲得當前的axes(軸),通過gcf()獲得當前的圖形(figure) import numpy as np import matplotlib.p

【 視覺化】熱力繪製原理

網上那些炫酷的熱力圖是如何繪製的? 相信你也很好奇,本文將以 canvas 作為繪圖示例來講解熱力圖的原理。 透明度 我們經常遇到透明度的概念,如 CSS 中的 opacity 屬性、rgba 顏色中的 alpha 變數、canvas 中的 globalAlpha 屬性等。 它們的取值範圍一般是 0-1

【程式碼】用Python玩轉微信,echarts餅,WordCloud雲圖,自動回覆訊息,好友地區

參考用Python玩轉微信(一),做了一些修改 import re import os import time import itchat from echarts import Echart, Legend, Pie import wordcloud from wordcloud im

30、python散點繪製簡單操作

散點圖;是以一個變數為橫座標,另一個變數為縱座標,利用三點(座標點)的分佈形態反映變數關係的一種圖形 1 散點圖繪圖函式 plot(x,y,'.',color=(r,g,b)) 引數說明: x,y  :  x,y軸的序列 ‘.’ '。' :繪圖是小點還是大點、

【原始碼】風向風速繪製函式WindRose

本函式實現方向強度直方圖的建立,即“風向風速圖”。 This function allows to create a Direction-intensity histogram, also known as “Wind Roses”. 還可以將圖中的資料儲存到資料表(可直接輸出

Python--subplot 子繪製

import pandas as pd import numpy as np import matplotlib.pyplot as plt import seaborn as sns import matplotlib as mpl # 準備資料 name_