如何在R中创建一个简单的热图

时间:2015-03-10 00:00:53

标签: r heatmap

我不能为我的生活弄清楚如何做到这一点,但它似乎应该很简单。

我有以下数据:

A   B   C

5   2   0.714972409
5   4   0.74183882
5   6   0.762162036
5   8   0.813707009
5   10  0.850703046
5   12  0.857035156
5   14  0.872640528
5   16  0.973139763
5   18  0.978478338
7   2   0.684788926
7   4   0.711897491
7   6   0.735098842
7   8   0.762857648
7   10  0.83291045
7   12  0.844075508
7   14  0.884207251
7   16  0.94815451
7   18  0.950971496
9   2   0.659268067
9   4   0.694214759
9   6   0.718271051
9   8   0.771301281
9   10  0.773598055
9   12  0.836032827
9   14  0.870630437
9   16  0.877580987
9   18  0.929563158
11  2   0.662650697
11  4   0.670933715
11  6   0.689340083
11  8   0.693320771
11  10  0.750268847
11  12  0.786759112
11  14  0.827402884
11  16  0.87493501
11  18  0.909695854
13  2   0.626547156
13  4   0.633140699
13  6   0.682464618
13  8   0.702283534
13  10  0.756709989
13  12  0.768034027
13  14  0.815414298
13  16  0.868304111
13  18  0.857143204
15  2   0.642907947
15  4   0.664392516
15  6   0.683305068
15  8   0.706409063
15  10  0.729998833
15  12  0.752115586
15  14  0.775292453
15  16  0.801494475
15  18  0.883794201
17  2   0.605458303
17  4   0.621560397
17  6   0.648538727
17  8   0.665378929
17  10  0.695163292
17  12  0.713840128
17  14  0.762558649
17  16  0.835615372
17  18  0.845147592
19  2   0.573326068
19  4   0.599060774
19  6   0.615440659
19  8   0.649463687
19  10  0.674024337
19  12  0.72427247
19  14  0.747894393
19  16  0.77787273
19  18  0.796066305
21  2   0.576442958
21  4   0.565737836
21  6   0.602169915
21  8   0.642909046
21  10  0.645458282
21  12  0.691301146
21  14  0.727324617
21  16  0.775556108
21  18  0.817496666
23  2   0.533171689
23  4   0.565956771
23  6   0.620844768
23  8   0.616694919
23  10  0.633368894
23  12  0.669562089
23  14  0.680912205
23  16  0.722211534
23  18  0.765015031
25  2   0.52308274
25  4   0.563778286
25  6   0.564340285
25  8   0.610685424
25  10  0.600061306
25  12  0.655410805
25  14  0.684528361
25  16  0.71358848
25  18  0.740716841
27  2   0.520854189
27  4   0.538261912
27  6   0.560022949
27  8   0.592117652
27  10  0.59707951
27  12  0.630212317
27  14  0.653396447
27  16  0.689859539
27  18  0.719597316
29  2   0.504173709
29  4   0.529294427
29  6   0.553966747
29  8   0.561650807
29  10  0.609853393
29  12  0.597217807
29  14  0.631877662
29  16  0.675602795
29  18  0.676468158
31  2   0.488265133
31  4   0.495376458
31  6   0.507751424
31  8   0.528459137
31  10  0.546474587
31  12  0.599001653
31  14  0.620699739
31  16  0.621521091
31  18  0.664893468
33  2   0.464415592
33  4   0.50818927
33  6   0.485845473
33  8   0.506436638
33  10  0.529943976
33  12  0.568978775
33  14  0.5816666
33  16  0.599533467
33  18  0.628195086

我想要创建一个热图,其中A是x轴,B是y轴,颜色取决于C.我还希望能够设置色标(最好是绿色阴影)并创造一个传奇。

我使用this post制作的热图与其中显示的热图非常相似,但我不知道如何重新着色或为图例添加不同的标题。

谢谢!

2 个答案:

答案 0 :(得分:4)

您可以使用ggplot()功能执行此操作,如下所示。在这里,我假设您的数据位于名为d的数据框中。

library(ggplot2)

ggplot(d, aes(x=A, y=B, fill=C)) +
    geom_tile() +
    scale_fill_gradient(low="white", high="darkgreen", name="Your Legend")

enter image description here

使用ggplot()制作的地块是高度可定制的,并且文档很好,所以如果没有别的话,这应该是一个很好的起点。

答案 1 :(得分:1)

使用qplot(参考您在问题中提到的帖子)和scale_fill_gradient(),您可以指定地块的色调和图例说明:

library(ggplot2)
qplot(x = A, y = B, data = df, fill = C, geom = "tile") +
scale_fill_gradient("lightgreen", "darkgreen", name = "CUSTOM LEGEND")

enter image description here

或者,您可以使用ggvis

library(ggvis)
df %>% 
  ggvis(~factor(A), ~factor(B), fill=~C) %>%
  layer_rects(width = band(), height = band(), strokeWidth := 0) %>%
  scale_nominal("x", padding = 0) %>%
  scale_nominal("y", padding = 0) %>%
  scale_numeric("fill", range=c("lightgreen", "darkgreen")) %>%
  add_legend("fill", title = "CUSTOM LEGEND") %>%
  add_axis("x", title = "A") %>%
  add_axis("y", title = "B")

enter image description here