• R语言image函数画热图


    image {graphics}

     

    Display a Color Image

    Description

    Creates a grid of colored or gray-scale rectangles with colors corresponding to the values in z. This can be used to display three-dimensional or spatial data aka images. This is a generic function.

    Usage

    image(x, ...)
    
    ## Default S3 method:
    image(x, y, z, zlim, xlim, ylim,
          col = hcl.colors(12, "YlOrRd", rev = TRUE),
          add = FALSE, xaxs = "i", yaxs = "i", xlab, ylab,
          breaks, oldstyle = FALSE, useRaster, ...)
    

    1. ### 样本数据
    2. data <- matrix(abs(rnorm(50,0,0.1)), nrow = 10, ncol = 5, byrow = TRUE
    3. m <- nrow(data)
    4. n <- ncol(data)
    5. colnames(data) <- paste0('y',1:n)
    6. rownames(data)<- paste0('x',1:m)
    7. ### 设定绘图参数
    8. breaks.frequency <- seq(from=min(data), to=max(data), 
    9.                         length.out=m * n)
    10. # myColors <- colorRampPalette(c("red", "blue"))
    11. colPal = "BrBG" # palette name 调色板名称
    12. # display.brewer.all()  # 显示所有调色板
    13. # Creates nice looking color palettes especially for thematic maps
    14. col_pal = RColorBrewer::brewer.pal(9, colPal)
    15. # 返回插值一组给定颜色以创建新调色板的函数
    16. myColors = grDevices::colorRampPalette(colors = col_pal)
    17. ### 绘制热图
    18. par(fig=c(0,1,0,1))
    19. image(1:nrow(data), 1:ncol(data), data,  
    20.       breaks=breaks.frequency , # more breakpoint than colour 
    21.       col=myColors(length(breaks.frequency)-1), 
    22.       axes = FALSE, cex = 1.5, xlab = "", ylab = "",
    23.       xlim = c(0,nrow(data)+6), ylim = c(0,ncol(data)))
    24. # 加分割线
    25. abline(h = 0:ncol(data) + 0.5, col = "white", lwd = 0.5)
    26. abline(v = 0:nrow(data) + 0.5, col = "white", lwd = 0.5)
    27. # 加文字
    28. mtext(side = 2, at = 1:n, text = colnames(data),
    29.       cex = 1, font = 3)
    30. mtext(side = 3, at = 1:m, text = rownames(data),
    31.       cex = 1, font = 3)
    32. ### 格子中绘制符号
    33. pvalue <- c(0.01,0.05)
    34. pvSymbols = c(46, 42)
    35. sigSymbolsSize = 2
    36. w = which(data < min(pvalue), arr.ind = TRUE)
    37. points(w, pch = pvSymbols[2], col = "black", cex = sigSymbolsSize)
    38. w = which(data < max(pvalue) & data > min(pvalue), arr.ind = TRUE)
    39. points(w, pch = pvSymbols[1], col = "black", cex = sigSymbolsSize)
    40. ### 符号说明
    41. points(x = m + 2, y = n-1, pch = pvSymbols[2], 
    42.        cex = sigSymbolsSize)
    43. text(x = m + 2, y = n-1
    44.      paste0(" P < ", min(pvalue)), pos = 4
    45.      cex = 0.8, adj = 0)
    46. points(x = m + 2, y = n-2
    47.        pch = pvSymbols[1], cex = sigSymbolsSize)
    48. text(x = m + 2, y = n-2,
    49.      paste0(" P < ", max(pvalue)), 
    50.      pos = 4, cex = 0.8)
    51. title(main = "heatmap", font.main = 4)
    52. ### 格子颜色图注legend
    53. par(fig=c(0.1,0.9,0,1), new = TRUE)
    54. image(x = c(0.9, 1), y = seq(0, 0.3, length.out = 200), 
    55.       z = matrix(seq(0, 1, length.out = 200), nrow = 1), 
    56.       col = col_pal, xlim = c(0, 1), ylim = c(0, 1), axes = FALSE
    57.       xlab = NA, ylab = NA)
    58. # 负对数并保留两位小数
    59. data_label <- round(-log(seq(min(data), max(data), length.out = 7)),1)
    60. atLims = seq(0, 0.3, length.out = 7)
    61. axis(side = 4, at = atLims, # 坐标轴位置,刻度线标记的点
    62.      tcl = -0.1, # 刻度长度
    63.      labels = data_label, # 刻度文字标签
    64.      las=2, # 标签是否平行于(=0)或垂直于(=2)坐标轴
    65.      lwd = 0.5, cex.axis = 0.5, line = 0.2)
    66. text(x = 0.85, y = 0.2, labels = "-log10(data)"
    67.      srt = 90, cex = 0.8, xpd = TRUE

    参考:

    https://zhuanlan.zhihu.com/p/505869908

    https://www.cnblogs.com/xudongliang/p/6762618.html​​​​​​​

  • 相关阅读:
    HTML5期末大作业:美妆网页主题网站设计——清新的手工肥皂网站展示(4页)HTML+CSS+JavaScript
    机器学习笔记之线性分类——线性判别分析(一)模型构建思路
    贪心:Huffman树
    大家都会的Docker
    开源高性能结构化日志模块NanoLog
    C# Math.Round()四舍五入、四舍六入五成双
    Matlab/simulink基于MPPT风光储微电网建模仿真(持续更新)
    损失函数L1Loss/L2Loss/SmoothL1Loss
    2022的七夕,奉上7个精美的表白代码,同时教大家快速改源码自用
    ISE的FPGA程序加载与固化——Omapl138/TMS320C6748+FPGA核心板
  • 原文地址:https://blog.csdn.net/qq_27390023/article/details/127833800