首页 > 解决方案 > 如何最好地在热图中同时呈现三个变量?

问题描述

给定一个矩阵,如:

m <- matrix(ncol = 4, nrow = 3)
colnames(m) <-c("attribute1-1","attribute1-2","attrbute1-3","attribute2")
rownames(m) <-c("sample1","sample2","sample3")
m[1,] <- c(5,7,0,2)
m[2,] <- c(0,0,0,6)
m[3,] <- c(0,0,4,1)

我想制作一个热图,其中属性 1-1 : 1-3 用于指示存在/不存在(单个条目是否为空白,取决于是否存在正值或 0)和属性 2 用于表示强度。换句话说:如果根据属性 1 列,在属性 1 的该实例中存在该行(例如,属性 1-2 对行 1 的正值),则强度由属性 2 规定。

我认为存在/不存在可以使用诸如“decostand”之类的公式来完成: X.pa <- decostand(X,method="pa")

并且可以从多个包创建热图,特别是“Superheat”。

不过,我似乎无法正常工作。任何关于继续多少的建议将不胜感激。先感谢您。

标签: rheatmap

解决方案


感谢您添加示例数据。解决方案使用ggplot2

m <- matrix(ncol = 4, nrow = 3)
colnames(m) <-c("attribute1-1","attribute1-2","attrbute1-3","attribute2")
rownames(m) <-c("sample1","sample2","sample3")
m[1,] <- c(5,7,0,2)
m[2,] <- c(0,0,0,6)
m[3,] <- c(0,0,4,1)

m
#>         attribute1-1 attribute1-2 attrbute1-3 attribute2
#> sample1            5            7           0          2
#> sample2            0            0           0          6
#> sample3            0            0           4          1


# library
library(tidyverse)


# adjust data
dat <- m %>%
  as_tibble(rownames="sample") %>%
  gather(name,value, -c(sample,attribute2)) %>% 
  mutate(attribute2=case_when(value==0 ~ 0, TRUE ~attribute2)) 

#make plot
ggplot(dat,aes(name,sample)) +
  geom_tile(aes(fill = attribute2), colour = "white") +
  scale_fill_gradient(low = "white", high = "steelblue")

reprex 包(v0.3.0)于 2020-04-04 创建


推荐阅读