热图无法准确表示数据

时间:2018-11-14 19:11:10

标签: r heatmap

下面是我的数据集的一个样本,它仅是14列,大约6500行,填充有1和0。下载我的整个数据集here

Row C1  C2  C3  C4  C5  C6  C7  C8  C9  C10 C11 C12 C13 C14
2   1   1   1   1   1   1   1   1   1   1   1   0   1   1
3   1   1   1   1   1   1   1   1   1   1   1   0   1   1
4   1   1   1   1   1   1   1   1   1   1   1   0   1   1
5   1   1   1   0   0   0   1   1   1   1   1   0   1   1
6   1   1   1   1   1   1   1   1   1   1   1   0   1   0
7   1   1   1   1   1   1   1   1   1   1   1   0   1   1
8   1   1   1   1   1   1   0   1   1   1   1   0   1   1
9   1   1   1   1   1   1   1   1   1   1   1   0   1   1

第8列有13个零,但在热图中未表示。

Row    C1   C2  C3  C4  C5  C6  C7  C8  C9  C10 C11 C12 C13 C14
5011    1   1   1   0   0   0   1   0   0   1   1   0   1   1
5801    1   1   1   1   1   1   1   0   0   1   0   0   1   0
5803    1   1   1   1   1   1   0   0   0   1   0   0   1   0
5809    1   1   1   1   1   1   0   0   0   1   0   0   1   0
5812    1   1   1   1   1   1   1   0   0   1   0   0   1   0
5813    1   1   1   1   1   1   0   0   0   1   0   0   1   0
5815    1   1   1   1   1   1   1   0   0   1   0   0   1   0
5817    1   1   1   1   1   1   1   0   0   1   0   0   1   0
5818    1   1   1   1   1   1   1   0   0   1   0   0   1   0
5823    1   1   1   1   1   1   1   0   0   1   0   0   1   0
5826    1   1   1   1   1   1   1   0   0   1   0   0   1   0
6435    1   1   1   0   0   0   0   0   0   1   1   0   1   1
6436    1   1   1   0   0   0   0   0   0   1   1   0   1   1

我如何编辑代码以使热图中的这13个零像其他列一样用白线表示?

热图代码

library(RColorBrewer)
library(openxlsx)


# Read in dataset
df <- read.xlsx("data set.xlsx", sheet = 1)

# Set as integer matrix
m <- as.matrix(df[, -1])

#Create colors
greyblack <- c("grey", "black")
pal <- colorRampPalette(greyblack)(100)

# Create heatmap
heatmap(m, Rowv = NA, Colv = NA, scale="none", col = pal, ylab="Records", main="Data Completeness")

enter image description here

1 个答案:

答案 0 :(得分:0)

这似乎是解决问题。第8列中这些丢失的行中的每行都是单个像素宽。第1列也有未出现的零(行2811和3639),其他列有很多未出现的缺失数据的单行(像素)空间。当我将数据集切成C8中零点之一附近的小区域时,它们会出现:

smalldf <- df[5009:5013,]
smallm <- as.matrix(smalldf[,-1])
heatmap(smallm, Rowv = NA, Colv = NA, scale="none", col = pal, ylab="Records", main="Data Completeness")

Image: When df is cut down to the area around one of the zeros on column 8, the white line shows up.

如果您真的想在热图中显示这些缺少1行的数据,建议您将相邻的1替换为零。 (即1个零变为1个零在其上方,而1个零在其下方。)。一种针对一列的快速而肮脏的方法:

> idx <- which(df$Column.8 == 0)
> df$Column.8[idx-2] <- 0
> df$Column.8[idx-1] <- 0
> df$Column.8[idx+1] <- 0
> df$Column.8[idx+2] <- 0

> m <- as.matrix(df[, -1])
> heatmap(m, Rowv = NA, Colv = NA, scale="none", col = pal, ylab="Records", main="Data Completeness")

尽管看起来好像只有2-3个离散的孔而不是8个单独的小孔,但这至少会显示线条:

Heatmap with 'resampled' column 8

我不确定这是否是一个好方法,因为我不确定您在使用此数据/热图的目的。如果只是可视化丢失数据的位置,那么这将有所帮助。 (您可能想对其他列做同样的事情)