如何在数据框上多次制作二进制热图

时间:2018-01-03 16:19:31

标签: r plot

我的数据如下所示

df<- structure(list(time = c(1L, 1L, 1L, 1L, 1L, 
1L, 5L, 5L, 5L, 5L, 5L, 5L, 12L, 12L, 12L, 12L, 12L, 12L
), grp = c("A", "B", "C", "D", "E", "F", "A","B", "C", "D", "E", 
"F", "A", "B", "C", "D", "E", "F"), `02` = c(36034L, 63763L, 
51432L, 65100L, 61444L, 71012L, 266610L, 389787L, 47659L, 63156L, 
84593L, 84331L, 514204L, 685995L, 325569L, 394893L, 88586L, 119206L
), `03` = c(45632L, 66505L, 60360L, 36685L, 107551L, 53360L, 
323952L, 344944L, 69601L, 51268L, 130665L, 59704L, 541017L, 578627L, 
424918L, 336442L, 156380L, 80952L), `04` = c(59025L, 52837L, 
68571L, 35788L, 75262L, 66601L, 424683L, 340948L, 79487L, 42809L, 
95607L, 81739L, 729858L, 606794L, 501805L, 333508L, 112263L, 
112676L), `05` = c(74767L, 48210L, 70972L, 67705L, 85576L, 89265L, 
393380L, 306633L, 77816L, 73611L, 106317L, 116890L, 677483L, 
533762L, 375046L, 483442L, 136605L, 160272L), `06` = c(50846L, 
37970L, 63896L, 78296L, 81216L, 62308L, 62613L, 21770L, 80955L, 
88832L, 97586L, 68345L, 100610L, 38642L, 130879L, 134422L, 164913L, 
112949L), `07` = c(26688L, 27830L, 17010L, 54074L, 26727L, 31109L, 
24448L, 38701L, 17378L, 46327L, 25324L, 25325L, 22457L, 33676L, 
20154L, 33916L, 25483L, 24284L), `08` = c(16498L, 26604L, 41201L, 
38417L, 43709L, 33217L, 69943L, 80638L, 37444L, 31701L, 46781L, 
31152L, 69223L, 102067L, 47771L, 70210L, 44783L, 22790L), `09` = c(16272L, 
24485L, 14546L, 74756L, 28193L, 770L, 72238L, 78418L, 9161L, 
48618L, 26466L, 1078L, 67369L, 89824L, 37838L, 93295L, 20890L, 
998L), `10` = c(20612L, 713L, 18114L, 57872L, 25684L, 27985L, 
73618L, 1770L, 11953L, 33347L, 25824L, 25860L, 70949L, 1520L, 
46044L, 66312L, 20971L, 20217L), `11` = c(23549L, 856L, 32854L, 
42906L, 33385L, 26218L, 88509L, 62103L, 23377L, 29738L, 33504L, 
26642L, 104893L, 100707L, 53324L, 63296L, 24867L, 21114L)), .Names = c("time", 
"grp", "02", "03", "04", "05", "06", "07", "08", "09", "10", 
"11"), class = "data.frame", row.names = c(NA, 18L))

我想对这些数据进行3次二进制热图。

在时间1有A到F,在时间5有A到F,在时间12有A到F

我希望获得每个时间集的最小值和最高值之间的范围,然后进行类似这样的二进制着色

enter image description here

1 个答案:

答案 0 :(得分:0)

我不确定你希望你的情节看起来像什么 - 在我看来你有grp和各种数字(参与者ID?)作为潜在的x轴变量。 y轴是否标记平均值?

无论如何,我的数据设置有点用于绘图:

require(ggplot2)
require(reshape2)
test <- melt(df, id = c("time", "grp"), variable.name = "Participant", 
                                        value.name = "Score")

test2 <- spread(test, key = time, value = Score)
colnames(test2) <- c("Group", "Participant", "T1", "T5", "T12")

从这一点开始,您可以执行以下操作:

ggplot(test2) + geom_tile(aes(x = Group, y = Participant, fill = T1))

这不完全是你想要的,但我对你的情节会发生什么感到困惑。这将让你开始热映射,至少