【问题标题】:Color Side Bars in heat map and dendrogram热图和树状图中的颜色侧栏
【发布时间】:2015-12-30 07:04:27
【问题描述】:

我正在尝试将颜色侧栏添加到热图列。

我的案例/样本属于不同的组/类别(例如,样本是许多基因在不同细胞中表达的结果,而组是不同的物种)。

我希望颜色侧栏能够反映不同的物种。该列已按单元格类型标记。我知道我可以为不同的物种(使用 if 和 else)一一分配不同的颜色,但是拥有超过 20 个物种和超过 200 个样本是不切实际的。同样,按组对数据进行排序并将不同的颜色分配给例如样本 1 到 10、11 到 25 等...

我发现as.character(as.numeric(data[,XXX]),其中XXX 是包含我的组名的列工作正常。然而,它提供了令人震惊的颜色。任何建议如何申请,例如从彩虹色到只有几种色调吗?

来自heatmap.2

colCol 似乎是合适的,但是在使用时它会忽略相同的类/组并分配例如所有样本的调色板......

除此之外,我想知道在仅绘制树状图时如何做同样的事情。好像更复杂了…… 将不胜感激!

【问题讨论】:

    标签: r colors heatmap dendextend


    【解决方案1】:

    如果我理解正确,你可以试试这样:

    library(gplots)
    library(dendextend)
    
    # sample data
    x  <- as.matrix(mtcars)
    
    # determine colors & palettes
    colClusters <- as.integer(nchar(names(mtcars)) == 2)+1L
    rowClusters <- as.integer(factor(substr(rownames(x), 1, 1)))
    colCols <- rainbow(2)
    rowCols <- rainbow(10)
    
    # create dendrograms
    colDend <- x %>% t %>% dist %>% hclust %>% as.dendrogram 
    rowDend <- x %>% dist %>% hclust %>% as.dendrogram 
    
    # plot heatmap
    heatmap.2(x, 
              Colv = colDend %>% color_branches(col=colCols[colClusters[order.dendrogram(colDend)]]), 
              Rowv = rowDend %>% color_branches(col=rowCols[rowClusters[order.dendrogram(rowDend)]]),
              colCol = colCols[colClusters], 
              colRow = rowCols[rowClusters])   
    

    【讨论】:

    • 太棒了!谢谢!!!不幸的是,我意识到应用调色板颜色(例如彩虹)并不是最好的选择。我正在为组/类分配我自己的颜色。但无法弄清楚颜色应用到行的顺序。我想如果我有例如5 个因素,我将定义 colCols
    • 除此之外,颜色分配似乎是随机的。例如。 colCols 中的第一个颜色名称未分配给数据集中的第一组,也未分配给树状图中聚类的第一组(最左侧的分支)。
    • 我在这里很晚了,但是如果你想要颜色的线性渐变,你可以使用颜色 = [(0, 0, 0), (1, 0, 0), (0, 1, 0)] n_bins = 100000 # 将插值离散化为 bin cmap_name = 'my_list' regn = LinearSegmentedColormap.from_list(cmap_name, colors, N=n_bins)
    • @AndoJurai 看起来像 Python,但问题是关于 R。:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-09-19
    • 1970-01-01
    • 2017-06-20
    • 2020-11-19
    • 1970-01-01
    • 2023-03-30
    • 2019-03-08
    相关资源
    最近更新 更多