Question: Using row order of one heatmap for a new heatmap
gravatar for Anand Rao
14 months ago by
Anand Rao320
United States
Anand Rao320 wrote:

I've generated a heatmap from my 1st input file containing a ( 315 row * 48 column ) grid of 0s and 1s, plus column and row names - please see after downloading file1)

I need to use order of row names from this x, y clustered heatmap to constrain how I make my next plots, which need to be:

A. barplots for these 3 single column files - A, B, C, and

B. another heatmap a different input file with a ( 315 row * 100 column) grid of 0s and 1s, with same row and column names as for the first heatmap.

I tried replicating the instructions at these other BioStars posts - post1 and post2, in order to extract row order from one heatmap and apply it to another, but without success.

Please note that I am using heatmap from base R, rather than pheatmap or Pheatmap (should I switch over?). I hope to convert these plots, using as.grob(plot), to "grobs", and then combine then into a plot_grid-based series of sub-panels.

The 3 specific questions I seek help for are:

1. How do I FIX the improper extraction of my ordered row list from the heatmap object ?

2. How should I modify my other input files (add rownames, delete column header etc) BEFORE they can be used in the final step?

3. What should be my R syntax for using heatmap clustered row order + new input files = ordered bar plots & ordered (new) heatmap

Thank you!

This is what I've tried thus far, without success:

HMM_Binaries = read.table("HMM_binary",header=TRUE,sep="\t")
HBM=data.matrix(HMM_Binaries, rownames.force = NA)

HBM_hm = heatmap(HBM, labRow = FALSE, col=c("firebrick1", "forestgreen"))

HBM_hm_row.order = HBM_hm$rowInd
HBM_hm_row.list = as.list(HBM_hm$rowInd)

> head(HBM_hm_row.order)
[1] 192 292 121 163 258 260

> head(HBM_hm_row.list)
[1] 192

[1] 292

[1] 121

[1] 163

[1] 258

[1] 260

> nrow(HBM_hm_row.order)
> nrow(HBM_hm_row.list)
> typeof(HBM_hm_row.order)
[1] "integer"
> typeof(HBM_hm_row.list)
[1] "list"

> Lengths_Reordered = Lengths[names(HBM_hm_row.order)]
> Lengths_Relisted = Lengths[names(HBM_hm_row.list)]
> nrow(Lengths_Reordered)
[1] 315
> nrow(Lengths_Relisted)
[1] 315
> typeof(Lengths_Reordered)
[1] "list"
> typeof(Lengths_Relisted)
[1] "list"
> head(Lengths_Reordered)
data frame with 0 columns and 6 rows
> head(Lengths_Relisted)
data frame with 0 columns and 6 rows
plot row reorder heatmap R • 765 views
ADD COMMENTlink modified 14 months ago • written 14 months ago by Anand Rao320


Please use github gists to show us plain text data. Clicking links and then downloading files takes way too much time. If possible, check out reprex so you can produce a reproducible example for us.

On the subject of heatmaps, you should really check out ComplexHeatmap. It will solve all your problems as it exposes APIs for almost everything and the developer is super responsive.

ADD REPLYlink written 14 months ago by RamRS30k

Thanks for your suggestion, Ram.

I am installing ComplexHeatmap and its dependencies currently.

Looks like ComplexHeatmap output be converted to a grob, based on a post here

ADD REPLYlink written 14 months ago by Anand Rao320

No, you won't need grobs. There are functions like row_order that will get you the row order. Please skim through the manual - it covers a lot of options.

ADD REPLYlink written 14 months ago by RamRS30k
Please log in to add an answer.


Use of this site constitutes acceptance of our User Agreement and Privacy Policy.
Powered by Biostar version 2.3.0
Traffic: 1115 users visited in the last hour