R 中热图的颜色

问题描述 投票:0回答:1

我正在用 R 制作热图,但由于对 R 非常陌生,我有一些问题:

我的数据是一个大矩阵,有 21 列和 89 行,包含从 0 到 16 的数字。我想以热图方式将热图着色为从 0(白色)到 16(深红色 - 或为此目的的任何颜色) 。或者甚至更奇特,有一个从 0 到 <10 (so that the points having above 10 "hits" get the same color).

的调色板

有人可以帮我吗?非常感谢!

我的代码:

library(ggplot2)
library("RColorBrewer")

AS <- read.csv("L:/Pseudoalteromonas/Heatmap antismash/HM_phyl.csv", sep=";")

row.names(AS) <- AS$Strain

AS <- AS[,2:21]

## The colors you specify.
my_palette <- colorRampPalette(c("white", "yellow","orange", "red"))(n = 299)

AS_matrix <- data.matrix(AS)

AS_heatmap <- heatmap(AS_matrix, Rowv=NA, Colv=NA, col = my_palette, scale="row", margins=c(5,10))

我的数据如下所示:

tail(HM)
   Sideophore Bacteriocin Aryl.polyene Nrps T1pks T2pks T3pks T1pks.Nrps Lantipeptide Terpene Hserlactone Transatpks

S4048          0           2            0    2     0     0     0          0            1       0           0          1
S3655          1           2            2    0     0     0     0          0            0       0           0          0
S4060          0           2            0    7     0     1     1          2            1       0           0          1
S2607          0           2            0   10     1     1     1          4            1       0           0          1
S4054          0           2            1    3     0     0     0          4            1       0           1          1
S4047          0           2            1    7     0     0     0          4            1       0           1          1
  Butyrolactone Indole Thiopeptide Ladderane Pufa Resorcinol Otherks Other
S4048             0      0           0         0    0          0       0     0
S3655             0      0           0         0    0          1       0     0
S4060             0      1           0         0    0          0       0     2
S2607             0      1           0         0    0          0       0     2
S4054             0      1           0         1    0          0       0     0
S4047             0      1           0         1    0          0       0     2
r colors heatmap
1个回答
0
投票

您可以将数据保留为 data.frame 并使用 ggplot2 (看起来这就是您调用 ggplot2 后的意图?)

library(ggplot2)
library(RColorBrewer)
library(tidyverse)

set.seed(12343)
# create matrix with 21 columns and 89 rows
# with numbers between 0 - 16

AS <- runif(n= 1869, min = 0, max = 16) %>%
  matrix(., nrow = 89)

colnames(AS) <- LETTERS[1:21]

AS <- as.data.frame(AS)
AS$train <- 1:89

AS <- gather(AS, A:U, key = "colname", value="value")

ggplot(AS, aes(x = colname, y=train)) + geom_tile(aes(fill = value), 
                                                  colour = "white") +
  scale_fill_distiller(palette = "Reds", limits = c(0,10), na.value = "#de2d26",
                       direction = 1, labels = c(0.0, 2.5, 5.0, 7.5, "> 10.0"))

所以使用你的代码,也许是这样的:

library(ggplot2)
library(RColorBrewer)
library(tidyverse)


AS <- read.csv("L:/Pseudoalteromonas/Heatmap antismash/HM_phyl.csv", sep=";")

# assume "train" is the row indicator, so we will use
# gather with -train argument to gather all columns but "train"

AS <- gather(AS, -train, key = "colname", value="value")


ggplot(AS, aes(x = colname, y=train)) + geom_tile(aes(fill = value), 
                                                  colour = "white") +
  scale_fill_distiller(palette = "Reds", limits = c(0,10), na.value = "#de2d26",
                       direction = 1, labels = c(0.0, 2.5, 5.0, 7.5, "> 10.0"))

# na.values (values >10) take maximum red color in Reds colorbrewer
© www.soinside.com 2019 - 2024. All rights reserved.