Skip to content

Draw heatmap simply using a tidy data frame

Notifications You must be signed in to change notification settings

papenfuss/tidyHeatmap

 
 

Repository files navigation

tidyHeatmap

Lifecycle:maturing

Please have a look also to

  • nanny for tidy high-level data analysis and manipulation
  • tidygate for adding custom gate information to your tibble
  • tidybulk for tidy and modular transcriptomics analyses

tidyHeatmap is a package that introduces tidy principles to the creation of information-rich heatmaps. This package uses ComplexHeatmap as graphical engine.

Advantages:

  • Modular annotation with just specifying column names
  • Custom grouping of rows is easy to specify providing a grouped tbl. For example df %>% group_by(...)
  • Labels size adjusted by row and column total number
  • Default use of Brewer and Viridis palettes

Functions/utilities available

Function Description
heatmap Plot base heatmap
add_tile Add tile annotation to the heatmap
add_point Add point annotation to the heatmap
add_bar Add bar annotation to the heatmap
add_line Add line annotation to the heatmap
save_pdf Save the PDF of the heatmap

Installation

To install the most up-to-date version

devtools::install_github("stemangiola/tidyHeatmap")

To install the most stable version (however please keep in mind that this package is under a maturing lifecycle stage)

install.packages("tidyHeatmap")

Input data frame

mtcars_tidy = 
    mtcars %>% 
    as_tibble(rownames="Car name") %>% 
    
    # Scale
    mutate_at(vars(-`Car name`, -hp, -vs), scale) %>%
    
    # tidyfy
    gather(Property, Value, -`Car name`, -hp, -vs)

mtcars_tidy
## # A tibble: 288 x 5
##    `Car name`           hp    vs Property  Value
##    <chr>             <dbl> <dbl> <chr>     <dbl>
##  1 Mazda RX4           110     0 mpg       0.151
##  2 Mazda RX4 Wag       110     0 mpg       0.151
##  3 Datsun 710           93     1 mpg       0.450
##  4 Hornet 4 Drive      110     1 mpg       0.217
##  5 Hornet Sportabout   175     0 mpg      -0.231
##  6 Valiant             105     1 mpg      -0.330
##  7 Duster 360          245     0 mpg      -0.961
##  8 Merc 240D            62     1 mpg       0.715
##  9 Merc 230             95     1 mpg       0.450
## 10 Merc 280            123     1 mpg      -0.148
## # … with 278 more rows

Plot

For plotting, you simply pipe the input data frame into heatmap, specifying:

  • The rows, cols relative column names (mandatory)
  • The value column name (mandatory)
  • The annotations column name(s)

mtcars

mtcars_heatmap = 
    mtcars_tidy %>% 
        heatmap(`Car name`, Property, Value ) %>%
        add_tile(hp)

mtcars_heatmap

Save

mtcars_heatmap %>% save_pdf("mtcars_heatmap.pdf")

Grouping

We can easily group the data (one group per dimension maximum, at the moment only the vertical dimension is supported) with dplyr, and the heatmap will be grouped accordingly

mtcars_tidy %>% 
    group_by(vs) %>%
    heatmap(`Car name`, Property, Value ) %>%
    add_tile(hp)

Custom palettes

We can easily use custom palette, using strings, hexadecimal color character vector,

mtcars_tidy %>% 
    heatmap(
        `Car name`, 
        Property, 
        Value,
        palette_value = c("red", "white", "blue")
    )

Or a grid::colorRamp2 function for higher flexibility

mtcars_tidy %>% 
    heatmap(
        `Car name`, 
        Property, 
        Value,
        palette_value = circlize::colorRamp2(c(-2, -1, 0, 1, 2), viridis::magma(5))
    )

Multiple groupings and annotations

tidyHeatmap::pasilla %>%
    group_by(location, type) %>%
    heatmap(
            .column = sample,
            .row = symbol,
            .value = `count normalised adjusted`
        ) %>%
    add_tile(condition) %>%
    add_tile(activation)

Annotation types

This feature requires >= 0.99.20 version

“tile” (default), “point”, “bar” and “line” are available

# Create some more data points
pasilla_plus = 
    tidyHeatmap::pasilla %>%
        dplyr::mutate(act = activation) %>% 
        tidyr::nest(data = -sample) %>%
        dplyr::mutate(size = rnorm(n(), 4,0.5)) %>%
        dplyr::mutate(age = runif(n(), 50, 200)) %>%
        tidyr::unnest(data) 

# Plot
pasilla_plus %>%
        heatmap(
            .column = sample,
            .row = symbol,
            .value = `count normalised adjusted`
        ) %>%
    add_tile(condition) %>%
    add_point(activation) %>%
    add_tile(act) %>%
    add_bar(size) %>%
    add_line(age)

About

Draw heatmap simply using a tidy data frame

Resources

Stars

Watchers

Forks

Packages

No packages published

Languages

  • R 100.0%