R语言gplots包heatmap.2函数是用来画热图的, 主要子图包括以下几个: 颜色键值图, 列系统树图, 行系统树图, 单元格图像, ColSideColors图, RowSideColors图以及额外图像. heatmap.2的参数很多, 声明如下:
heatmap.2 (x, # dendrogram control Rowv = TRUE, Colv=if(symm)"Rowv" else TRUE, distfun = dist, hclustfun = hclust, dendrogram = c("both","row","column","none"), symm = FALSE, # data scaling scale = c("none","row", "column"), na.rm=TRUE, # image plot revC = identical(Colv, "Rowv"), add.expr, # mapping data to colors breaks, symbreaks=min(x < 0, na.rm=TRUE) || scale!="none", # colors col="heat.colors", # block sepration colsep, rowsep, sepcolor="white", sepwidth=c(0.05,0.05), # cell labeling cellnote, notecex=1.0, notecol="cyan", na.color=par("bg"), # level trace trace=c("column","row","both","none"), tracecol="cyan", hline=median(breaks), vline=median(breaks), linecol=tracecol, # Row/Column Labeling margins = c(5, 5), ColSideColors, RowSideColors, cexRow = 0.2 + 1/log10(nr), cexCol = 0.2 + 1/log10(nc), labRow = NULL, labCol = NULL, srtRow = NULL, srtCol = NULL, adjRow = c(0,NA), adjCol = c(NA,0), offsetRow = 0.5, offsetCol = 0.5, # color key + density info key = TRUE, keysize = 1.5, density.info=c("histogram","density","none"), denscol=tracecol, symkey = min(x < 0, na.rm=TRUE) || symbreaks, densadj = 0.25, # plot labels main = NULL, xlab = NULL, ylab = NULL, # plot layout lmat = NULL, lhei = NULL, lwid = NULL, # extras extrafun=NULL, ... )
x: 是矩阵, 是热图的每一个单元的取值;
系统树图的控制
Rowv: 用于指定行是否需要重新排序, 如果是TURE, 则还用每一行的均值进行重排序, 如果是由整数组成的向量, 则按向量的次序重排序, 如果是dendrogram对象, 相当用"as-is", 没有重排序;
Colv: 与Rowv类似, 另外若x是方阵, 则默认Colv = "Rowv", 表示分组跟Rowv相同;
distfun: 用于指定如何计算各行和各列之间的距离, 默认是dist函数, 而dist函数默认使用欧几里得距离;
hclustfun: 用于指定横坐标或纵坐标不是系统树图时分组聚类的方法;
dendrogram: 可为"none", "row", "column"或者"both", 用于如何做系统树图;
symm: 指定x矩阵是否对称处理, 只有在x是方阵时可以为TRUE.
数据规范化
scale: 指定x是否按行或按列规范化, 默认值为"none";
na.rm: NA值是否需要移除(只是将单元格移除).
作图
revC: 纵轴是否需要反向作图; Colv为"Rowv"时默认为TRUE, 其他情况默认为FALSE;
add.expr: 一个表达式, 在image函数调用后计算, 可以为图像添加成分. (源代码只有以下两行包括add.expr参数, heatmap函数也有这参数, 尚不清楚有何用处, 望广大网友指教)
if (!missing(add.expr)) eval(substitute(add.expr))
映射数值到颜色
breaks: 数值向量指定相邻两个数值之间的值为同一个颜色, 或者数值指定分成多少breaks以确定颜色值(min(x)到max(x)等值分割).
symbreaks: breaks是否为对称, 默认如果有负数, 则为TRUE, 否则为FALSE.
颜色
col: 单元格颜色, 默认使用heat.colors函数.
单元格分割
colsep: 纵轴分割线的坐标;
rowsep: 横轴分割线的坐标;
sepcolor: 分割线的颜色;
sepwidth: 分割线的宽度, 是二元向量, 默认取值为c(0.05, 0.05).
单元格标注
cellnote: 矩阵或者字符型变量, 标注在单元格内;
notecex: 单元格内标注的大小;
notecol: 单元格内标注的颜色;
na.color: 当单元格为NA时, 单元格的颜色, 默认为背景颜色.
痕迹量级
trace: 指定是否用实线穿过单元格, 可取值为"row", "column", "both", "none", 偏移单元格中线的程度与以下值成正比:颜色键值如果是对称的话, 则是单元格对应数值相对0的偏移值, 如果不对称, 则是单元格对应数值相对于最大值和最小值的和的0.5倍的偏移值;
tracecol: 上述直线的颜色;
hline: 数值向量指定虚线从单元格水平穿过, 在trace为"row"或"both"时有效, 默认值为median(breaks);
vline: 数值向量指定虚线从单元格垂直穿过, 在trace为"col"或"both"时有效, 默认值为median(breaks);
linecol: 上述虚线的颜色.
行列标注
margins: 长度为2的数值向量, 是par(mar = c(margins[1], 0, 0, margins[2]))的参数, 也会影响其他绘图区域比如ColSideColors和RowSideColors;
ColSideColors: 长度ncol(x)的指示颜色的字符型向量;
RowSideColors: 长度nrow(x)的指示颜色的字符型向量;
cexRow: 指定行标注的大小;
cexCol: 指定列标注的大小;
labRow: 指定行的标注;
labCol: 指定列的标注;
strRow: 指定行标注的斜角;
strCol: 指定列标注的斜角;
adjRow: 指定行标注对齐方式, 默认值为c(0, NA);
adjCol: 指定列标注对齐方式, 默认值为c(NA, 0);
offsetRow: 指定行标注远离作图区域多少空格;
offsetCol: 指定列标注远离作图区域多少空格;
颜色键值和密度分布信息
key: 颜色键值图是否应该标出;
keysize: 颜色键值图大小, 默认为1.5;
density.info: 可设置为"histogram", "density", "none", 分别是直方图, 密度图, 不画;
denscol: 字符型给出上述曲线的颜色, 默认值为tracecol;
symkey: 颜色键值是否要对称, 默认情况下, 如果x中有负值, symkey取TRUE;
densadj: density函数的adjust参数, 可控制density图像的y轴取值, 默认值为0.25.
图像标注
main: 图像的主标题;
xlab: 图像的x轴标注;
ylab: 图像的y轴标注.
图像布局
lmat: 控制四个主要元素(颜色键值图编号为4, 列系统树图编号为3, 行系统树图编号为2, 单元格图像为编号1)的相对位置, heatmap.2的作图顺序与这个编号次序一致,其默认值为rbind(c(4, 3), c(2, 1));
lhei: 行的相对高度, 默认值为(keysize, 4), 如果存在ColSideColors, 则为(keysize, 0.2, 4);
lwid: 列的相对宽度, 默认值为(keysize, 4), 如果存在RowSideColors, 则为(keysize, 0.2, 4);
需要注意的是, 当ColSideColors和RowSideColors其中一个存在时, 上述四个图像元素的编号为原始编号加1, 编号1为这个增加的元素; 如果都存在, 上述四个主图像的编号依次加2, RowSideColors的编号为1, ColSideColors的编号为2. 这些情形下, lmat的默认值会相应变化.
额外部分
extrafun: 一个函数, 在所有工作完成之后调用.
需要注意的是, 如果这个函数是作图, 那么这个函数里面的第一个图像编号为上述四个主图像和两个副图像的最大编号加1, 如果还有图像,编号依次加1; 如果刚开始没给这些图像预留位置(lmat), 则会在新的一页画图.
library(gplots) data(mtcars) x <- as.matrix(mtcars) lmat <- rbind( c(5,3,4), c(2,1,4) ) lhei <- c(1.5, 4) lwid <- c(1.5, 4, 0.75) myplot <- function() { oldpar <- par("mar") par(mar=c(5.1, 4.1, 0.5, 0.5)) plot(mpg ~ hp, data=x) } heatmap.2(x, lmat=lmat, lhei=lhei, lwid=lwid, key=FALSE, extrafun=myplot)