Entering edit mode
7.3 years ago
As heatmaps in R are a recurring theme, I thought I'd collect information here:
1. List of heatmap functions (and packages) in R:
- heatmap
- heatmap.2 (package gplots)
- heatmap.3 (package GMD, not on CRAN anymore)
- heatmap.plus (not on CRAN anymore)
- aheatmap (package NMF)
- pheatmap
- ggheat (code in this blog post)
- heatmaply
- d3heatmap (not maintained, not on CRAN anymore)
- ComplexHeatmap
- Superheat
- Heatplus
- iheatmapr
2. Tutorials:
- Using heatmap()
- Using heatmap.2()
- Using ComplexHeatmap
- Using Superheat
- Guide to heatmaps in R
- Using EnrichedHeatmap for visualization of NGS experiments
3. Biostars posts:
EDIT 2017-02-03: Added more heatmaps. Thanks to people contributing below.
EDIT 2017-03-14: Added another one.
EDIT 2019-05-28: Added another one.
EDIT 2019-09-06: Added tutorial for EnrichedHeatmap (thanks to ATpoint)
EDIT 2020-08-14: Update: GMD and d3heatmap not on CRAN.
EDIT 2022-05-04: Update: heatmap.plus not on CRAN.
We need to modify this xkcd strip to replace "standards" with "heatmap functions in R".
...or "pipeline frameworks written in python." :) I find it is interesting there are so many tools/packages in the same application space, especially when they are implemented almost the same way.
Heatmaps in R are a curious beast as they do a lot more than "just" draw the heatmap.
They promote that endemic and flawed ideology that is very common of R based software. Instead of breaking down the steps into their logical units that one can easily build upon:
They give you one "convenient" function with lots of parameters - but all that leads to is a misleading simplicity. It is really not clear what takes place and whether those steps are universally applicable. Hence the many options - neither of which takes on what the real problem is - overly tightly coupled concepts.
The majority of the people that use heatmaps probably do not fully understand how these heatmaps were created and that there are essential data processing steps involved that fundamentally alter what the heatmap will look like.
This reminds me of the "Quilt plot" paper a few years ago. This paper received a lot of hate but it proposed a much simpler implementation of the heatmap function in R (without clustering). I think such a paper would never have existed if the base R function was more intuitive/simple.
And also ComplexHeatmap https://bioconductor.org/packages/release/bioc/html/ComplexHeatmap.html
nice
Someone mentioned to me in the office that the list is missing d3heatmap and superheat.
Don't forget aheatmap from the NMF package. I also often roll my own with image() and layout(), and it is TERRIBLE!
I do it with ggplot2 and it is awful, but I like the flexibility it gives me with the layout.
Also add corrplot for correlation heatmaps.
Tutorials are here,
https://cran.r-project.org/web/packages/corrplot/vignettes/corrplot-intro.html
I just wrote up a post for heatmap, check here http://rpubs.com/crazyhottommy/a-tale-of-two-heatmap-functions
Hi Jean-Karim Heriche,
I haven't tried it (yet*) but this one looks pretty: Superheat: An R package for creating beautiful and extendable heatmaps for visualizing complex data. Also on github
*PhD-student-slang for "I would certainly like to but never will"
Hi Jean-Karim Heriche, I am wondering how can I make cluster heatmap, where I can assign samples to per-defiend clusters? thanks!
Just reorder the matrix as per your clustering. If you're working with hierarchical clustering, you can do something like this with base R:
Check also the various heatmap packages. For example pheatmap and ComplexHeatmap allow to split a heatmap based on clusters.
Here one for EnrichedHeatmap: Using EnrichedHeatmap for visualization of NGS experiments
Missing heatmap3 (github, CRAN).
Useful tutorial at http://compbio.ucsd.edu/making-heat-maps-r/ that covers and compares heatmap, heatmap.2, aheatmap, pheatmap, heatmap3, and annHeatmap2 (heatplus). It also carefully points out the difference between heatmap3 and heatmap.3, and notes that the latter is associated not just with the GMD package as listed here but also several other implementations that collide on the name.