Home > database >  heatplot in R with legend and significance
heatplot in R with legend and significance

Time:06-03

I am trying to plot a heatmap in R on a dataframe havin 4 rows and 25 columns.

dput(phenotype_MEs_spearman)
structure(c(0.775716994264046, 0.0910480716154271, -0.0514747882016944, 
-0.169827441380469, 0.404562363501092, -0.435174118607051, 0.13374373005016, 
0.489862481100151, -0.114284685722514, -0.761045911632707, 0.495406436748506, 
0.929829361365109, -0.277485780113759, -0.429039767681859, 0.700705594355245, 
0.457625938992488, -0.247512419900641, -0.113209494324045, 0.708570331437349, 
0.393376052991576, -0.118035855713154, -0.305702354381165, -0.290035279717762, 
0.244591643266854, -0.306940744474044, 0.518832649338805, 0.0727194182446541, 
-0.53578371373029, -0.287008903928769, 0.121196630426957, 0.0386444908440733, 
-0.293856049151607, -0.37281061751506, 0.0431372549019608, 0.0346989224086207, 
-0.174783401732786, -0.311971104231166, 0.0589483284133727, 0.0659586723306214, 
-0.237262101903185, -0.366102671178631, 0.514728682170543, 0.132315741474068, 
-0.510694314445485, -0.229574963400293, 0.272292221662227, 0.0480524155806754, 
-0.402311181510548, -0.367571459428325, 0.000890392876856985, 
0.167470660234718, -0.106674346605227, 0.353829169366645, 0.243499652002784, 
-0.27390740874073, -0.177627378980968, 0.135392516859865, 0.774555403556772, 
-0.40578155374757, -0.77156502747978, 0.0965632274941801, 0.745678834569324, 
-0.320267837857297, -0.614131086951304, 0.0912520699834402, 0.826493388052896, 
0.0718578251373989, -0.570120239038088, 0.0827489380084959, 0.572630618955048, 
-0.026514987880097, -0.506163150694794, -0.10749514003888, -0.0125206998344013, 
0.16484988120095, -0.114275085799314, -0.22875176998584, 0.0727098183214534, 
-0.000643194854441165, -0.206297549619603, 0.213780689754482, 
-0.253296373629011, -0.312371901024792, 0.251222790217678, 0.0500611995104039, 
-0.35015239878081, -0.206525547795618, 0.282588139294886, -0.346451628386973, 
0.00473036215710274, -0.0702450380396957, 0.00020639834881321, 
-0.242419660642715, -0.399160006719946, -0.17016103871169, 0.357323541411669, 
-0.252593179254566, -0.270012239902081, 0.0845225238198095, 0.165207478340173
), .Dim = c(4L, 25L), .Dimnames = list(c("Classical", "Mesenchymal", 
"Neural", "Proneural"), c("MEdarkturquoise", "MEtan", "MEdarkgrey", 
"MEsalmon", "MEviolet", "MEdarkolivegreen", "MEdarkred", "MEskyblue", 
"MEskyblue3", "MEsteelblue", "MEmidnightblue", "MEcyan", "MEsienna3", 
"MEyellowgreen", "MElightcyan", "MEorange", "MEblack", "MEdarkmagenta", 
"MEdarkorange", "MEwhite", "MEblue", "MEgrey60", "MEdarkgreen", 
"MEred", "MEgrey")))

I'm using the following code:

COLORS=c("1.0","0.8","0.6","0.4","0.2","0.0","-0.2","-0.4","-0.6","-0.8","-1.0")

heatmap_spearman<-heatmap(phenotype_MEs_spearman, Colv = NA, Rowv = NA, reorderfun = function(d, w) reorder(d, w),scale="none",col= colorRampPalette(brewer.pal(8, "RdBu"))(100),ColSideColors,RowSideColors)

legend(-0.07,1, legend= COLORS[1:11],fill=colorRampPalette(brewer.pal(8, "RdBu"))(11),title="Spearman\nCorrelation")

I'm trying to put a "*" over every box in the graph where the value is <0.5, i.e., add a marker for significance. Any suggestions using other tequnues shall also be welcomed.

CodePudding user response:

I've done a heatmap before using the ggplot2 package. It's pretty easy using the reshape2 melt() function.

Are you looking for something like this?


library(reshape2)
library(ggplot2)

b <- reshape2::melt(phenotype_MEs_spearman)

ggplot(data = b)   geom_tile(aes(fill = value, x = Var1, y = Var2))  
  geom_text(aes(x = Var1, y = Var2, label = case_when(value < 0.5 ~ "*", TRUE ~ "") ))

enter image description here

You can flip the coords aswell and get rid of the x and y labs

b <- reshape2::melt(phenotype_MEs_spearman)

ggplot(data = b)   geom_tile(aes(fill = value, x = Var1, y = Var2))  
  geom_text(aes(x = Var1, y = Var2, label = case_when(value < 0.5 ~ "*", TRUE ~ "")))  
  scale_fill_viridis_c()  
  coord_flip()   
  theme(axis.text.x = element_text(angle = 90))  
  labs(x = NULL, y = NULL)

enter image description here

  • Related