如何在R中将数据帧绘制为热图/网格?

时间:2017-12-09 20:46:58

标签: r ggplot2

我非常感谢R的一些帮助。我想绘制一个网格化数据的数据框(比如像从左上角到右下角的对角线一样)。我已经看过很多使用ggplot2的例子,但是,我只是缺乏R操纵数据结构所需的经验;我已经在LISP和Java编程多年了但我的头脑不会绕R :-(

数据如下所示:

                    tension    cluster     migraineNoAura          migraineAura
tension                  NA          1.5        6.960453e+00          3.596953
cluster        1.943113e+08           NA                  NA                NA
migraineNoAura 8.462798e+00           NA                  NA          7.499999
migraineAura   2.833333e+00           NA        7.148313e+07                NA

这只是一个小子集,它是一个60x60的数据帧。请注意NA

我希望有一个60x60网格,用值着色,使用数据框中的名称标记x和y。

1 个答案:

答案 0 :(得分:4)

首先,您需要将数据框格式从宽格式格式化为长格式。以下是使用tidyverse格式化数据框的示例。

library(tidyverse)

dt2 <- dt %>%
  rownames_to_column() %>%
  gather(colname, value, -rowname)
head(dt2)
#          rowname colname        value
# 1        tension tension           NA
# 2        cluster tension 1.943113e+08
# 3 migraineNoAura tension 8.462798e+00
# 4   migraineAura tension 2.833333e+00
# 5        tension cluster 1.500000e+00
# 6        cluster cluster           NA

现在我们已准备好使用ggplot2使用geom_tile绘制热图。

ggplot(dt2, aes(x = rowname, y = colname, fill = value)) +
  geom_tile()

enter image description here