星号的值错误地放置在热图上

Values for asterisks incorrectly placed on heat map

我想在热图中为 P 值 < 0.05 加上星号。我有一个单独的电子表格,其中包含我读入 R 的 P 值以及随后的热图,但是,我使用的函数似乎没有将星号放在正确的单元格中。例如,在下图中,rho = 0 单元格没有附加 P 值,但那里有星号。

电子表格如下所示。对于所有为 NA 的 P 值,我输入“1”以避免错误。如果除了修复星号的位置之外还有更好的方法来执行此操作,请告诉我。

我使用的代码如下:

library(circlize)
library(ComplexHeatmap)
library(Hmisc)

sx_syn_p <- read.csv('spear_synx1_p.csv', header=TRUE)

Shime1x_syn_spearman1 <- Heatmap(sx_syn, circlize::colorRamp2(c(-1, -0.5, 0, 0.5, 1), 
                                                                        c('#d7191c', '#fdae61',
                                                                          '#FFFFFF', '#abd9e9', 
                                                                          '#2c7bb6')),
                                column_names_gp=grid::gpar(fontsize=20,
                                                           col=c(rep('#4daf4a', 8), rep('#984ea3',7))),
                                row_names_gp=grid::gpar(fontsize=20, 
                                                        col=c(rep('#4daf4a', 8), rep('#984ea3',7))),
                                heatmap_legend_param=list(title="Spearman's rho", 
                                                          direction='horizontal',
                                                          at = c(-1, -0.5, 0, 0.5, 1)),
                   cell_fun = function(j, i, x, y, w, h, fill){
                     if(sx_syn_p[i, j] < 0.05) {
                       grid.text('*', x, y)
                     }
                   })
sx_syn1_spear <- draw(Shime1x_syn_spearman1, heatmap_legend_side='top')

我认为该函数根据电子表格中的 P < 0.05 输入星号,但输入的位置似乎不正确。

我设法通过删除电子表格中的第一列标签并重新运行代码来解决这个问题。我认为将数据框转换为矩阵会根据 this example 提供进一步的保证。我的代码的问题是 sx_syn 的顺序与 sx_syn_p.

的顺序不同