我非常感谢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。
答案 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()