Hi,
I aim to narrow the width of each cell and minimize the space within them. Although I attempted to do this by modifying 'width = width/2' in cell_fun1, this reduced the width but the color block did not properly fit to the cell. Any advice or solutions would be highly appreciated.
cell_fun1 = function(j, i, x, y, width, height, fill) {
grid.rect(x = x, y = y, width = width, height = height,
gp = gpar(col = "gray", fill = fill))
if(mut_mat[i, j] != 0) {
if(mut_mat[i, j] > 9) {
grid.text(mut_mat[i, j], x, y, gp = gpar(col = "white"))
} else {
grid.text(mut_mat[i, j], x, y, gp = gpar(col = "black"))
}
}
}
col_fun1 = colorRamp2(c(0, 5, 10, 20, 40), c("white","#bae4b3","#74c476", "#31a354", "#006d2c"))
hm1 <- Heatmap(mut_mat,
name = "#_of_LOE_mutations",
cluster_rows = FALSE,
cluster_columns = FALSE,
show_row_names = TRUE,
show_column_names = TRUE,
column_names_side = "top",
row_names_side = "left",
column_names_gp = gpar(fontsize=13,fontface="bold"),
row_names_gp = gpar(fontsize=10,fontface="bold"),
cell_fun = cell_fun1,
col = col_fun1,
show_heatmap_legend = FALSE,
width = heatmap_width,
height = heatmap_height
)
hm1
Original heatmap:
After modifying "width = width" to "width = width/2" in cell_fun1
1 answer
I think the main thing is not to use "width = width/2" in cell_fun1. Using ComplexHeatmap 2.14.0 on R 4.2.1 i was able to modify cell width and height via width and height params in call to Heatmap. I tried a few different widths and heights and each time the cell borders adjusted accordingly.
cell_fun1 = function(j, i, x, y, width, height, fill) {
grid.rect(x = x, y = y, width = width, height = height,
gp = gpar(col = "gray", fill = fill))
if(mat[i, j] != 0) {
if(mat[i, j] > 9) {
grid.text(mat[i, j], x, y, gp = gpar(col = "white"))
} else {
grid.text(mat[i, j], x, y, gp = gpar(col = "black"))
}
}
}
mat <- matrix(c(0,25,0,1,12,2,9,1,4,3,1,12,3,0,1), byrow = TRUE, nrow = 3)
rownames(mat) <- c("KRAS", "ARID1A", "PIK3CA")
library(ComplexHeatmap)
col_fun1 = circlize::colorRamp2 (c(0, 5, 10, 20, 40),
c("white","#bae4b3","#74c476", "#31a354", "#006d2c"))
hm1 <- Heatmap(mat,
name = "#_of_LOE_mutations",
cluster_rows = FALSE,
cluster_columns = FALSE,
show_row_names = TRUE,
show_column_names = TRUE,
column_names_side = "top",
row_names_side = "left",
column_names_gp = gpar(fontsize=13,fontface="bold"),
row_names_gp = gpar(fontsize=10,fontface="bold"),
cell_fun = cell_fun1,
col = col_fun1,
show_heatmap_legend = FALSE,
width = unit(5, "cm"),
height = unit(2, "cm")
)
hm1
The only difference in my code and yours is that I explicitly set width and height using unit since you didn't show how you defined heatmap_width and heatmap_height in your example.
Log in to answer this question.
I may be missing something, but can you not just shrink the width of the heatmap in general? That is how one would typically do this.
How are you setting
heatmap_widthandheatmap_height? That's what you'll need to tweak.