找回密码
 立即注册
查看: 4048|回复: 1

R语言之heatmap.2 热图

[复制链接]
发表于 2015-1-6 05:18:50 | 显示全部楼层 |阅读模式
本帖最后由 R语言微信号 于 2015-1-6 05:21 编辑

R语言gplots包heatmap.2函数是用来画热图的, 主要子图包括以下几个: 颜色键值图, 列系统树图, 行系统树图, 单元格图像, ColSideColors图, RowSideColors图以及额外图像. heatmap.2的参数很多, 声明如下:
  1. heatmap.2 (x,

  2.            # dendrogram control
  3.            Rowv = TRUE,
  4.            Colv=if(symm)"Rowv" else TRUE,
  5.            distfun = dist,
  6.            hclustfun = hclust,
  7.            dendrogram = c("both","row","column","none"),
  8.            symm = FALSE,

  9.            # data scaling
  10.            scale = c("none","row", "column"),
  11.            na.rm=TRUE,

  12.            # image plot
  13.            revC = identical(Colv, "Rowv"),
  14.            add.expr,

  15.            # mapping data to colors
  16.            breaks,
  17.            symbreaks=min(x < 0, na.rm=TRUE) || scale!="none",

  18.            # colors
  19.            col="heat.colors",

  20.            # block sepration
  21.            colsep,
  22.            rowsep,
  23.            sepcolor="white",
  24.            sepwidth=c(0.05,0.05),

  25.            # cell labeling
  26.            cellnote,
  27.            notecex=1.0,
  28.            notecol="cyan",
  29.            na.color=par("bg"),

  30.            # level trace
  31.            trace=c("column","row","both","none"),
  32.            tracecol="cyan",
  33.            hline=median(breaks),
  34.            vline=median(breaks),
  35.            linecol=tracecol,

  36.            # Row/Column Labeling
  37.            margins = c(5, 5),
  38.            ColSideColors,
  39.            RowSideColors,
  40.            cexRow = 0.2 + 1/log10(nr),
  41.            cexCol = 0.2 + 1/log10(nc),
  42.            labRow = NULL,
  43.            labCol = NULL,
  44.            srtRow = NULL,
  45.            srtCol = NULL,
  46.            adjRow = c(0,NA),
  47.            adjCol = c(NA,0),
  48.            offsetRow = 0.5,
  49.            offsetCol = 0.5,

  50.            # color key + density info
  51.            key = TRUE,
  52.            keysize = 1.5,
  53.            density.info=c("histogram","density","none"),
  54.            denscol=tracecol,
  55.            symkey = min(x < 0, na.rm=TRUE) || symbreaks,
  56.            densadj = 0.25,

  57.            # plot labels
  58.            main = NULL,
  59.            xlab = NULL,
  60.            ylab = NULL,

  61.            # plot layout
  62.            lmat = NULL,
  63.            lhei = NULL,
  64.            lwid = NULL,

  65.            # extras
  66.            extrafun=NULL,
  67.            ...
  68.            )
复制代码

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是否按行或按列规范化, 如果symm是FALSE则默认值为"row", 不然是"none";

    na.rm: NA值是否需要移除(只是将单元格移除).


   作图
    revC: 纵轴是否需要反向作图; Colv为"Rowv"时默认为TRUE, 其他情况默认为FALSE;
   add.expr: 一个表达式, 在image函数调用后计算, 可以为图像添加成分. (源代码只有以下两行包括add.expr参数, heatmap函数也有这参数, 尚不清楚有何用处, 望广大网友指教)


   映射数值到颜色
    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 =  *)的参数;
    ColSideColors: 长度ncol(x)的指示颜色的字符型向量;
    RowSideColors: 长度nrow(x)的指示颜色的字符型向量;
    cexRow: 指定行标注的大小;
    cexCol: 指定列标注的大小;
    labRow: 指定行的标注;
    labCol: 指定列的标注;
    strRow: 指定行标注的斜角;
    strCol: 指定列标注的斜角;
    adjRow: 指定行标注对齐方式, 默认值为c(0, NA);
    adjCol: 指定列标注对齐方式, 默认值为c(NA, 0);
    offsetRow: 指定行标注远离作图区域多少空格;
    offsetCol: 指定列标注远离作图区域多少空格;

    颜色键值和密度分布信息
    key: 颜色键值图是否应该标出, 作图区域默认值为par(mar = c(5, 4, 2, 1), cex = 0.75), 且不可更改, 故该作图区域长至少5.25行(7*0.75), 宽至少3.75行(5*0.75);
    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), 则会在新的一页画图.

  1. library(gplots)
  2. data(mtcars)
  3. x  <- as.matrix(mtcars)
  4. lmat <- rbind( c(5,3,4), c(2,1,4) )
  5. lhei <- c(1.5, 4)
  6. lwid <- c(1.5, 4, 0.75)

  7. myplot <- function() {
  8.   oldpar <- par("mar")
  9.   par(mar=c(5.1, 4.1, 0.5, 0.5))
  10.   plot(mpg ~ hp, data=x)
  11. }

  12. heatmap.2(x, lmat=lmat, lhei=lhei, lwid=lwid, key=FALSE, extrafun=myplot)
复制代码
网络转:http ://my.oschina.net/u/1791586/blog/285250

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|R语言中文网

GMT+8, 2024-11-25 16:26 , Processed in 0.023236 second(s), 18 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表