如何从单列值创建8x12热图?

时间:2017-11-10 10:42:34

标签: r matrix heatmap

我在R中有一列值代表来自8x12网格的测量结果:

以下是前四行测量。 A1-H1表示网格中的第1行,A2-H2表示第2行等。我总共有12行。如何将此数据转换为8x12的矩阵(在此虚拟示例中为8X4),以便我可以创建一个热图,以一种方式显示相对权重值,以便概括在数据丢失时丢失的网格的原始形状作为单列导入?

提前谢谢。

Cell    Weight
A1  2
B1  2
C1  2
D1  2
E1  2
F1  2
G1  2
H1  2
A2  2
B2  0.1
C2  2
D2  4
E2  2
F2  0.1
G2  2
H2  2
A3  2
B3  2
C3  2
D3  2
E3  2
F3  4
G3  2
H3  2
A4  2
B4  2
C4  6
D4  2
E4  2
F4  2
G4  2
H4  2

2 个答案:

答案 0 :(得分:1)

使用库tidyrdplyr

df <- read.table(header=TRUE, as.is=TRUE, text='Cell    Weight
A1  2
B1  2
C1  2
D1  2
E1  2
F1  2
G1  2
H1  2
A2  2
B2  0.1
C2  2
D2  4
E2  2
F2  0.1
G2  2
H2  2
A3  2
B3  2
C3  2
D3  2
E3  2
F3  4
G3  2
H3  2
A4  2
B4  2
C4  6
D4  2
E4  2
F4  2
G4  2
H4  2')
m <- df %>% separate(Cell, into=c('column','rows'), sep=1) %>% spread(column, Weight) 
rownames(m) <- m$rows
m$rows <- NULL
heatmap(as.matrix(m))

答案 1 :(得分:1)

我认为你不需要矩阵,只需从你的表中提取行/列信息并将其用于geom_tile

df$Row <- gsub("[A-Z]", "", df$Cell)
df$Col <- gsub("[0-9]", "", df$Cell)
library(ggplot2)
ggplot(df, aes(Col, Row, fill = Weight)) +
    geom_tile()

enter image description here