下面是我的数据集的一个样本,它仅是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")
答案 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
我不确定这是否是一个好方法,因为我不确定您在使用此数据/热图的目的。如果只是可视化丢失数据的位置,那么这将有所帮助。 (您可能想对其他列做同样的事情)