我在R中制作热图,但对于R来说很新,我有一些问题:
我的数据是一个21列和89行的大矩阵,包含0到16之间的数字。我希望热像图以0(白色)到16(深红色 - 或任何颜色的热量方式着色)清酒)。或者甚至更漂亮,具有从0到<10的调色板(使得具有超过10“点击的点”获得相同的颜色)。
任何人都可以帮我吗?非常感谢!
我的代码:
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
答案 0 :(得分: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