R 语言绘制环状热图
作者:佳名
来源:简书 - R 语言文集
1. 读取并处理基因表达数据
这是我的基因表达量数据:
> myfiles <- list.files(pattern = "*.csv")
> myfiles
[1] "4_total_total_FPKM.csv"
> matrix <- read.csv(myfiles[1], sep=',', header=T, check.names=FALSE, row.names=1)
1.1 提取部分数据集
提取 padj 的值小于 0.2 的数据:
> matrix <- subset(matrix, padj<0.2)
1.2 提取基因表达值所在的列,组成新的矩阵,并将矩阵转置
由于 R 语言的 scale 函数是按列归一化,对于我们一般习惯基因名为行,样本名为列的数据框,就需要进行转置。
mat <- t(matrix[,7:12]) # 7-12 列为每个样本的基因表达量
1.3 基因表达归一化
mat <- scale(mat, center =
TRUE, scale =
TRUE)
View(mat)
1.4 对数据进行聚类,从而得到其 dendrogram
# dist 函数计算 microRNA 间的距离, hclust 函数用来进行层次聚类.
dend <- as.dendrogram(hclust(dist(t(mat))))
1.5 定义进化树颜色
library(dendextend)
n <- 3 # n 可自定义
dend <- dend %>% set("branches_k_color", k = n)
1.6 可视化处理
par(mar=c(7.5,3,1,0))
plot(dend)
1.7 聚类后的矩阵
如图 Fig 3,聚类后的矩阵的列的顺序会发生变化。按此顺序,重新排列矩阵。
mat2 <- mat[, order.dendrogram(dend)]
- 查看矩阵重排后的样本名
> lable1 <- row.names(mat2);
> lable1
[1] "H-CK-1-3" "H-CK-2-3" "H-CK-3-3" "H-PA-1-3" "H-PA-2-3" "H-PA-3-3"
查看矩阵重排后的基因名
> lable2 <- colnames(mat2);
> lable2
[1] "hsa-miR-424-3p" "hsa-miR-10401-3p" "hsa-miR-130b-5p"
[4] "hsa-miR-200a-5p" "hsa-miR-615-3p" "hsa-miR-99b-3p"
[7] "hsa-miR-1307-3p" "hsa-miR-484" "hsa-miR-128-3p"
[10] "hsa-miR-1283" "hsa-miR-149-5p" "hsa-miR-1180-3p"
[13] "hsa-let-7d-3p" "hsa-miR-744-5p" "hsa-miR-301a-5p"
[16] "hsa-miR-7706" "hsa-miR-92a-3p" "hsa-miR-423-5p"
[19] "hsa-miR-320b" "hsa-miR-320a-3p" "hsa-miR-320e"
[22] "hsa-miR-365a-3p" "hsa-miR-365b-3p" "hsa-miR-181b-5p"
[25] "hsa-miR-365a-5p" "hsa-miR-181d-5p" "hsa-miR-522-3p"
[28] "hsa-let-7a-5p" "hsa-let-7c-5p" "hsa-let-7e-5p"
[31] "hsa-miR-877-3p" "hsa-let-7b-5p" "hsa-miR-23b-3p"
[34] "hsa-miR-23a-3p" "hsa-miR-423-3p" "hsa-miR-26a-5p"
[37] "hsa-miR-4521" "hsa-let-7e-3p" "hsa-miR-30d-3p"
[40] "hsa-miR-147b-3p" "hsa-miR-126-5p" "hsa-miR-141-3p"
[43] "hsa-miR-21-3p" "hsa-miR-339-3p" "hsa-miR-339-5p"
[46] "hsa-miR-181b-3p" "hsa-miR-29a-5p" "hsa-let-7f-2-3p"
[49] "hsa-miR-590-3p" "hsa-miR-122-5p" "hsa-miR-374a-5p"
[52] "hsa-miR-27a-5p" "hsa-miR-30b-5p" "hsa-miR-372-3p"
[55] "hsa-miR-29b-1-5p" "hsa-miR-362-5p" "hsa-miR-92a-1-5p"
[58] "hsa-miR-671-5p" "hsa-miR-212-5p" "hsa-miR-125b-2-3p"
[61] "hsa-miR-22-3p" "hsa-miR-148a-3p" "hsa-miR-31-5p"
[64] "hsa-miR-660-5p" "hsa-miR-140-3p" "hsa-miR-7-1-3p"
[67] "hsa-miR-22-5p" "hsa-miR-148a-5p" "hsa-miR-132-5p"
[70] "hsa-miR-29a-3p" "hsa-let-7a-3p" "hsa-miR-147b-5p"
[73] "hsa-miR-181a-3p" "hsa-let-7c-3p" "hsa-miR-182-5p"
[76] "hsa-miR-221-5p" "hsa-miR-196a-5p" "hsa-miR-21-5p"
[79] "hsa-miR-16-5p" "hsa-miR-374b-5p" "hsa-miR-181a-5p"
[82] "hsa-miR-125b-5p" "hsa-miR-20a-5p" "hsa-miR-17-5p"
[85] "hsa-miR-7-5p" "hsa-miR-98-5p"
只有基因名顺序,也就是列名顺序发生了变化。
nr <- nrow(mat2);nr
[1] 6
nc <- ncol(mat2);nc
[1] 86
1.8 构建颜色转变函数
require(
"circlize")
col_fun <- colorRamp2(c(-
1.5,
0,
1.5), c(
"skyblue",
"white",
"red"))
1.9 矩阵中的数值转变为颜色
> col_mat <- col_fun(mat2)
> col_mat[,1] # 查看第一列结果
H-CK-1-3 H-CK-2-3 H-CK-3-3 H-PA-1-3 H-PA-2-3 H-PA-3-3
"#FF0000FF" "#FFDED3FF" "#FFAF96FF" "#ABDBF1FF" "#DCF0F9FF" "#BDE3F4FF"
> col_mat[1,] # 查看第一行的结果
hsa-miR-424-3p hsa-miR-10401-3p hsa-miR-130b-5p hsa-miR-200a-5p
"#FF0000FF" "#FF6645FF" "#FF7B5AFF" "#FF5535FF"
hsa-miR-615-3p hsa-miR-99b-3p hsa-miR-1307-3p hsa-miR-484
"#FF7351FF" "#FF6645FF" "#FF7453FF" "#FF6140FF"
hsa-miR-128-3p hsa-miR-1283 hsa-miR-149-5p hsa-miR-1180-3p
"#FF0000FF" "#FF220EFF" "#FF987AFF" "#FF3B20FF"
hsa-let-7d-3p hsa-miR-744-5p hsa-miR-301a-5p hsa-miR-7706
"#FF2712FF" "#FF1E0CFF" "#FF200DFF" "#FF0000FF"
hsa-miR-92a-3p hsa-miR-423-5p hsa-miR-320b hsa-miR-320a-3p
"#FFA286FF" "#FFAD93FF" "#E4F3FAFF" "#E2F2FAFF"
hsa-miR-320e hsa-miR-365a-3p hsa-miR-365b-3p hsa-miR-181b-5p
"#E1F2FAFF" "#D7EEF8FF" "#D7EEF8FF" "#FFDDD1FF"
hsa-miR-365a-5p hsa-miR-181d-5p hsa-miR-522-3p hsa-let-7a-5p
"#FFECE5FF" "#FBFDFEFF" "#F3FAFDFF" "#FFF2ECFF"
hsa-let-7c-5p hsa-let-7e-5p hsa-miR-877-3p hsa-let-7b-5p
"#FFF6F2FF" "#FFB7A0FF" "#FFC1ACFF" "#FFDED2FF"
hsa-miR-23b-3p hsa-miR-23a-3p hsa-miR-423-3p hsa-miR-26a-5p
"#FFC8B5FF" "#FFD1C1FF" "#FFDACDFF" "#FFDED2FF"
hsa-miR-4521 hsa-let-7e-3p hsa-miR-30d-3p hsa-miR-147b-3p
"#FFA286FF" "#FFAE94FF" "#F0F8FCFF" "#FFE9E1FF"
hsa-miR-126-5p hsa-miR-141-3p hsa-miR-21-3p hsa-miR-339-3p
"#FFDDD1FF" "#E9F5FBFF" "#FAFDFEFF" "#DCF0F9FF"
hsa-miR-339-5p hsa-miR-181b-3p hsa-miR-29a-5p hsa-let-7f-2-3p
"#E3F3FAFF" "#C9E8F6FF" "#95D3EDFF" "#B3DEF2FF"
hsa-miR-590-3p hsa-miR-122-5p hsa-miR-374a-5p hsa-miR-27a-5p
"#B5DFF2FF" "#C5E6F5FF" "#D8EEF8FF" "#D1EBF7FF"
hsa-miR-30b-5p hsa-miR-372-3p hsa-miR-29b-1-5p hsa-miR-362-5p
"#CCE9F6FF" "#D7EDF8FF" "#A1D7EFFF" "#87CEEBFF"
hsa-miR-92a-1-5p hsa-miR-671-5p hsa-miR-212-5p hsa-miR-125b-2-3p
"#AADBF0FF" "#B3DFF2FF" "#C1E4F4FF" "#C0E4F4FF"
hsa-miR-22-3p hsa-miR-148a-3p hsa-miR-31-5p hsa-miR-660-5p
"#BCE2F3FF" "#C2E4F4FF" "#B1DEF2FF" "#B3DFF2FF"
hsa-miR-140-3p hsa-miR-7-1-3p hsa-miR-22-5p hsa-miR-148a-5p
"#A7DAF0FF" "#D4ECF7FF" "#C7E7F5FF" "#B8E0F3FF"
hsa-miR-132-5p hsa-miR-29a-3p hsa-let-7a-3p hsa-miR-147b-5p
"#B4DFF2FF" "#9ED6EFFF" "#9BD5EEFF" "#B2DEF2FF"
hsa-miR-181a-3p hsa-let-7c-3p hsa-miR-182-5p hsa-miR-221-5p
"#AEDCF1FF" "#B3DFF2FF" "#87CEEBFF" "#87CEEBFF"
hsa-miR-196a-5p hsa-miR-21-5p hsa-miR-16-5p hsa-miR-374b-5p
"#A2D8EFFF" "#D2EBF7FF" "#87CEEBFF" "#93D2EDFF"
hsa-miR-181a-5p hsa-miR-125b-5p hsa-miR-20a-5p hsa-miR-17-5p
"#87CEEBFF" "#87CEEBFF" "#87CEEBFF" "#87CEEBFF"
hsa-miR-7-5p hsa-miR-98-5p
"#94D3EDFF" "#87CEEBFF"
2. 画板设置与绘图
2.1 画板初始化设置
par(mar <- c(0,0,0,0))
circos.clear();
circos.par(canvas.xlim = c(-1.4,1.4),
canvas.ylim = c(-1.4,1.4),
cell.padding = c(0,0,0,0),
gap.degree = 90)
factors <- "a"
circos.initialize(factors, xlim = c(0, ncol(mat2)))
2.2 添加第一个轨道
circos.track(ylim = c(0, nr),bg.border = NA,track.height = 0.1*nr,
panel.fun = function(x, y) {
for(i in 1:nr) {
circos.rect(xleft = 1:nc - 1, ybottom = rep(nr - i, nc),
xright = 1:nc, ytop = rep(nr - i + 1, nc),
border = "white",
col = col_mat[i,])
circos.text(x = nc,
y = 6.4 -i,
labels = lable1[i],
facing = "downward", niceFacing = TRUE,
cex = 0.6,
adj = c(-0.2, 0))
}
})
2.3 添加基因名称
for(i in 1:nc){
circos.text(x = i-0.4,
y = 7,
labels = lable2[i],
facing = "clockwise", niceFacing = TRUE,
cex = 0.5,adj = c(0, 0))
}
2.4 添加进化树
max_height <-max(attr(dend, "height"))
circos.track(ylim = c(0, max_height),bg.border = NA,track.height = 0.3,
panel.fun = function(x, y){
circos.dendrogram(dend = dend,
max_height = max_height)
})
circos.clear()
2.5 添加图例
library(ComplexHeatmap)
lgd <- Legend(at = c(-2,-1, 0, 1, 2), col_fun = col_fun,
title_position = "topcenter",title = "Z-score")
draw(lgd, x = unit(0.65, "npc"), y = unit(0.65, "npc"))

—
END—
声明:本文经原作者同意后授权转载,文章(包括文字和图片)的著作权归原作者所有,任何形式的转载都请联系原作者。

本文分享自微信公众号 - 生信科技爱好者(bioitee)。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。
R 语言绘制环状热图的更多相关文章
- R语言绘制相对性关系图
准备 第一步就是安装R语言环境以及RStudio 图绘制准备 首先安装库文件,敲入指令,回车 install.packages('corrplot') 然后安装excel导入的插件,点击右上角impo ...
- [R语言] 基于R语言实现环状条形图的绘制
环状条形图(Circular barplot)是条形图的变体,图如其名,环状条形图在视觉上很吸引人,但也必须小心使用,因为环状条形图使用的是极坐标系而不是笛卡尔坐标系,每一个类别不共享相同的Y轴.环状 ...
- 一幅图解决R语言绘制图例的各种问题
一幅图解决R语言绘制图例的各种问题 用R语言画图的小伙伴们有木有这样的感受,"命令写的很完整,运行没有报错,可图例藏哪去了?""图画的很美,怎么总是图例不协调?" ...
- R语言绘制花瓣图flower plot
R语言中有很多现成的R包,可以绘制venn图,但是最多支持5组,当组别数大于5时,venn图即使能够画出来,看上去也非常复杂,不够直观: 在实际的数据分析中,组别大于5的情况还是经常遇到的,这是就可以 ...
- R语言绘制QQ图
无论是直方图还是经验分布图,要从比较上鉴别样本是否处近似于某种类型的分布是困难的 QQ图可以帮我们鉴别样本的分布是否近似于某种类型的分布 R语言,代码如下: > qqnorm(w);qqline ...
- R语言绘制空间热力图
先上图 R语言的REmap包拥有非常强大的空间热力图以及空间迁移图功能,里面内置了国内外诸多城市坐标数据,使用起来方便快捷. 开始 首先安装相关包 install_packages("dev ...
- R语言绘制沈阳地铁线路图
##使用leaflet绘制地铁线路图,要求 ##(1)图中绘制地铁线路 library(dplyr) library(leaflet) library(data.table) stations< ...
- R语言绘制箱型图
箱形图是数据集中数据分布情况的衡量标准.它将数据集分为三个四分位数.盒形图表示数据集中的最小值,最大值,中值,第一四分位数和第四四分位数. 通过为每个数据集绘制箱形图, 比较数据集中的数据分布也很有用 ...
- R语言绘制茎叶图
与直方图相比,茎叶图更能细致的看出数据分布情况! 代码: > x<-c(25, 45, 50, 54, 55, 61, 64, 68, 72, 75, 75,+ 78, 79, 81, 8 ...
- R语言——绘制半圆形图
好久没发点新的作品了.......也许...... Que sera, seraWhatever will be, will be
随机推荐
- 最大流基础(Maximum Flow Basis)
1. 最大流问题定义 1.1 流网络(Flow network) Def. A flow network is a tuple \(G = (V, E, s, t, c)\): Digraph \(( ...
- 基于DPDK抓包的Suricata安装部署
一.背景 Suricata支持网卡在线抓包和离线读取PCAP包两种形式的抓包: 离线抓包天然具有速度慢.非实时的特点 在线捕获数据包又包括常规网卡抓包.PF_RING和DPDK的方式 由于项目分光的流 ...
- [Maven]Maven聚合工程
一直对此问题好奇,正好有这兴致和时间,有必要了解一下. 所谓聚合项目,实际上就是对项目分模块. 互联网项目一般来说按照业务分(订单模块.VIP模块.支付模块.CMS模块-): 传统的软件项目,大多采用 ...
- [Git]解决: error: unable to create file src/main/webapp/xxxxxx/xxxx: Filename too long
git有可以创建4096长度的文件名,然而在windows最多是260,因为git用了旧版本的windows api,为此踩了个坑. 1 解决方案 $ git config --global core ...
- DVWA上low级别反射型,存储型,DOM型XSS攻击获取用户cookie
1.什么是反射型 XSS 攻击? 反射型 XSS 是指应用程序通过 Web 请求获取不可信赖的数据,并在未检验数据是否存在恶意代码的情况下,将其发送给用户. 反射型 XSS 一般可以由攻击者构造带有恶 ...
- android studio 做登陆界面
先来一个最简单的 AndroidManifest.xml <?xml version="1.0" encoding="utf-8"?> &l ...
- hasOwnProperty的作用、配合for in使用 、key in Object判读key
我们都知道,对象以 key|value的形式存在 它和数组一样可以遍历,对象可以通过for in 去遍历,拿到遍历对象的所有key 某些idea在使用for in 时,提示代码片段中就有出现以下这种情 ...
- 安装kafka和zookeeper以及使用
1.安装zookeeper zookeeper下载:http://zookeeper.apache.org/releases.html 从3.5.5开始,带有bin名称的包才是要下载的包可以直接使用 ...
- es6 新增 set 和 map数据结构以及应用场景
https://www.cnblogs.com/sexintercourse/p/12269580.html Set数据容器,这是一个能够存储无重复值的有序列表. 1. 创建集合 set let se ...
- JS Bom(window)对象
window 是客户端浏览器对象模型的基类,window 对象是客户端 JavaScript 的全局对象.一个 window 对象实际上就是一个独立的窗口,对于框架页面来说,浏览器窗口每个框架都包含一 ...