R实战之热点图(HeatMap)
快速实现是搜索帮助文档的首要目的,所以此处涉及实战的文章一概略去传统帮助文档的理论部分,直接上代码加注释!
本文将介绍R语言下利用ggplot2包制作heatmap的代码
-------------------------我是分割线-------------------------------
测试数据:

数据中的空白行、列用以分割heatmap,区别不同的数据处理,如不需要删除即可。
1、制作连续型
#引入包
library(ggplot2)
library(reshape)
library(zoo) #载入windows下的字体
library(extrafont)
#loadfonts(device="win")
#查看字体库
#fonts() #读取数据
mydata <- read.csv("G:\\R\\test\\Book3.csv",sep=",",header=TRUE)
mydata #数据转换成 ‘rowname, columnname, value’这样形式的数据
mydata.m <- melt(mydata) ##设置图形样式
theme_change <- theme(
#设置xy轴字体样式、大小等 colour="grey50",
axis.text.x=element_text(family = "Arial",size=12, colour="black",angle = 0),
axis.text.y=element_text(family = "Arial",size=12, colour="black",face="italic"),
axis.title.x=element_text(family = "Arial",angle=0, face="plain", size=14),#font face ("plain", "italic", "bold", "bold.italic")
axis.title.y=element_text(family = "Arial",angle=270, face="plain", size=14),
axis.line = element_blank(),
axis.ticks = element_blank(),
#设置图例字体样式大小
#legend.text
#legend.title
#legend.position #the position of legends ("none", "left", "right", "bottom", "top", or two-element numeric vector)
#清空背景及xy轴样式
plot.background = element_blank(),
panel.grid.minor = element_blank(),
panel.grid.major = element_blank(),
panel.background = element_blank(),
panel.border = element_blank()
) ## 输出图形 #Arial
p <- ggplot(data = mydata.m, aes(x = variable, y = Name, fill = value)) +
geom_tile()+
#geom_tile(color="white", size=0.1) + #color="white", size=0.1设置栅格之间的分割线颜色及大小
theme_classic() + #去掉灰快
theme_change +
scale_x_discrete(limits=c("BS","X", "BS1","RS"),labels=c("BS","","BS","RS"))+#x轴排序及标注
scale_y_discrete(limits=c("B","C","NA1","Meth1", "Meth2","Meth3","Meth4","NA2","S","G","M"),labels=c("B","C","","Meth1", "Meth2","Meth3","Meth4","","S","G","M"))+ #y轴排序及标注
xlab('row name1') +
ylab('column name') + #更改行名和列名
scale_fill_gradient(na.value='#FFFFFF',low = 'green', high = 'red')+ #修改图例名字以及图中颜色
#scale_fill_gradient2('legend name', na.value='#FFFFFF',low = '#8856a7', high = '#636363', mid = '#ece7f2')+ #修改图例名字以及图中颜色
geom_text(aes(label=round(value,2)), family="Arial", angle=0, colour = "black",size=5)#显示每个栅格的数值及字体设置
p #legend的设置参见http://www.cookbook-r.com/Graphs/Legends_(ggplot2)/
输出效果图:

2、分级别显示
#引入包
library(ggplot2)
library(reshape)
library(zoo) #载入windows下的字体
library(extrafont)
#loadfonts(device="win")
#查看字体库
#fonts() #读取数据
mydata <- read.csv("G:\\R\\test\\Book3.csv",sep=",",header=TRUE)
mydata #数据转换成 ‘rowname, columnname, value’这样形式的数据
mydata.m <- melt(mydata) #将现有的value值划分等级
quantile_range <- quantile(mydata.m$value, na.rm = TRUE, probs = seq(0, 1, 0.2)) #颜色模板
color_palette <- colorRampPalette(c("green", "red"))(length(quantile_range) - 1) #图例标签
label_text <- rollapply(round(quantile_range, 2), width = 2, by = 1, FUN = function(i) paste(i, collapse = " : ")) #将value值用1,2,3,4...等级代替(用以着色)
mod_mat <- matrix(findInterval(mydata.m$value, quantile_range, all.inside = TRUE)) ##设置图形样式
theme_change <- theme(
#设置xy轴字体样式、大小等 colour="grey50",
axis.text.x=element_text(family = "Arial",size=12, colour="black",angle = 0),
axis.text.y=element_text(family = "Arial",size=12, colour="black",face="italic"),
axis.title.x=element_text(family = "Arial",angle=0, face="plain", size=14),#font face ("plain", "italic", "bold", "bold.italic")
axis.title.y=element_text(family = "Arial",angle=270, face="plain", size=14),
axis.line = element_blank(),
axis.ticks = element_blank(),
#设置图例字体样式大小
#legend.text
#legend.title
#legend.position #the position of legends ("none", "left", "right", "bottom", "top", or two-element numeric vector)
#清空背景及xy轴样式
plot.background = element_blank(),
panel.grid.minor = element_blank(),
panel.grid.major = element_blank(),
panel.background = element_blank(),
panel.border = element_blank()
) ## 输出图形 #Arial
p <- ggplot(data = mydata.m, aes(mydata.m$variable, mydata.m$Name, fill=factor(melt(mod_mat)$value))) +
geom_tile()+
#geom_tile(color="white", size=0.1) + #color="white", size=0.1设置栅格之间的分割线颜色及大小
theme_classic() + #去掉灰快
theme_change +
scale_x_discrete(limits=c("BS","X", "BS1","RS"),labels=c("BS","","BS","RS"))+#x轴排序及标注
scale_y_discrete(limits=c("B","C","NA1","Meth1", "Meth2","Meth3","Meth4","NA2","S","G","M"),labels=c("B","C","","Meth1", "Meth2","Meth3","Meth4","","S","G","M"))+ #y轴排序及标注
xlab('row name1') +
ylab('column name') + #更改行名和列名
scale_fill_manual(values = color_palette, name = "Level", labels = label_text) +
#scale_fill_gradient(na.value='#FFFFFF',low = 'green', high = 'red')+ #修改图例名字以及图中颜色
#scale_fill_gradient2('legend name', na.value='#FFFFFF',low = '#8856a7', high = '#636363', mid = '#ece7f2')+ #修改图例名字以及图中颜色
geom_text(aes(label=round(value,2)), family="Arial", angle=0, colour = "black",size=5)#显示每个栅格的数值及字体设置
p #legend的设置参见http://www.cookbook-r.com/Graphs/Legends_(ggplot2)/
输出效果图:

--------------------------------我是分割线------------------------------------
转载请注明出处!
R实战之热点图(HeatMap)的更多相关文章
- javascript的 热点图怎么写
在gis中,你如果用js来写热点图 不借助后台怎么搞,as的话比较容易有相应的类库甚至官方都有.而且用js不借助arcgis发布rest服务,(注:热点图可以借助服务的形式发布,arcgis for ...
- 《R实战》读书笔记一
你仅仅要想处理数据,<R实战>这本书就能够助你一臂之力. <R实战>的目标是让你认识R,而且可以对数据进行操作.可视化和理解.该书包含4部分16个章节8个附录. 第一部分:入门 ...
- 用Excel制作热图(heatmap)的方法
http://jingyan.baidu.com/article/64d05a0240ec75de55f73bd8.html 利用Excel 2010及以上版本的"条件格式"--& ...
- R实战 第三篇:数据处理(基础)
数据结构用于存储数据,不同的数据结构对应不同的操作方法,对应不同的分析目的,应选择合适的数据结构.在处理数据时,为了便于检查数据对象,可以通过函数attributes(x)来查看数据对象的属性,str ...
- K8S(14)监控实战-grafana出图_alert告警
k8s监控实战-grafana出图_alert告警 目录 k8s监控实战-grafana出图_alert告警 1 使用炫酷的grafana出图 1.1 部署grafana 1.1.1 准备镜像 1.1 ...
- R语言学习 - 热图绘制heatmap
生成测试数据 绘图首先需要数据.通过生成一堆的向量,转换为矩阵,得到想要的数据. data <- c(1:6, 6:1, 6:1, 1:6, (6:1)/10, (1:6)/10, (1:6)/ ...
- R语言学习 - 热图简化
绘制热图除了使用ggplot2,还可以有其它的包或函数,比如pheatmap::pheatmap (pheatmap包中的pheatmap函数).gplots::heatmap.2等. 相比于gg ...
- 基于HTML5实现3D热图Heatmap应用
Heatmap热图通过众多数据点信息,汇聚成直观可视化颜色效果,热图已广泛被应用于气象预报.医疗成像.机房温度监控等行业,甚至应用于竞技体育领域的数据分析. http://www.hightopo.c ...
- R实战读书笔记四
第三章 图形入门 本章概要 1 创建和保存图形 2 定义符号.线.颜色和坐标轴 3 文本标注 4 掌控图形维数 5 多幅图合在一起 本章所介绍内容概括例如以下. 一图胜千字,人们从视觉层更易获取和理解 ...
随机推荐
- jQuery还原select下拉列表和清空input的值,回显下拉列表框的值
实现用jQuery还原select下拉列表的值,用了很多种方式,花了一些时间,最后重要找到一种可以实现的方式, 页面上有这些内容 <select id ="level" na ...
- PowerDesigner的使用一
首先我们需要创建一个测试数据库,为了简单,我们在这个数据库中只创建一个Student表和一个Major表.其表结构和关系如下所示. 看看怎样用PowerDesigner快速的创建出这个数据库吧. 1. ...
- Go 语言学习
golang中国 http://www.golangtc.com/ 第三方github学习 https://github.com/Unknwon/go-fundamental-programmingh ...
- linux同步系统时间
命令:ntpdate 路径:/usr/sbin/ntpdate 例子:ntpdate us.pool.ntp.org 查看日期时间命令:date 修改日期时间命令:date -s "2012 ...
- Android课程---首学开发
新建一个Activity2类: package com.hanqi.test; import android.app.Activity; import android.os.Bundle; impor ...
- SQLSERVER2012 附加数据库重名的问题
SQL2012附加数据库时如何更改数据库名称呢 方法一: 在“附加为”那一栏填写新的数据库名称就可以 方法二: 使用脚本 附加时点击脚本会自动生成附加脚本 直接修改database的名称即可!
- linux信号机制与python信号量
1.信号本质 软中断信号(signal,又简称为信号)用来通知进程发生了异步事件.在软件层次上是对中断机制的一种模拟,在原理上,一个进程收到一个信号与处理器收到一个中断请求可以说是一样的.信号是进程间 ...
- 磨刀不误砍柴工,使用visual studio之前应该先了解这些...
注:以下的快捷键在vs2010中测试无误. 众所周知,vs是一个非常强大的开发平台,但是又有多少小伙伴熟悉以下这些快捷键呢? 当然,不知道这些快捷键与开发并没有直接关系,不过,就我而言,以下这些快捷键 ...
- Android Studio 开发环境设置
修改字体(File=>Settings 按下如所图设计字体) 显示行号.空格 用 制表符 代替 空格 显示 最终代码显示如下图 格式化代码 使用 Ctrl+Alt+L
- 关于HTML中标签<a>使用js的注意事项
以下两点都不可取: 1.<a href="#" onClick="popUp('http://www.baidu.com');return false;" ...