hist() 不显示所有列

hist() not showing all columns

我正在导入 df 然后 运行ning hist()df:

df <- read.table("https://leicester.figshare.com/ndownloader/files/23581310", sep = ",", header = TRUE, stringsAsFactors = FALSE)
hist(df)

但它并未显示所有 124 列的直方图 - 仅显示一个子集。我不确定为什么?如何获得 df 中所有列的直方图?我希望能够 运行 hist() 整个数据框,因为它还在每个直方图的底部显示 values/missing 值的数量。

我想知道您如何在不 Vectorize 的情况下在数据框中使用 hist。最好是您使用不同的设备,例如 png.

png('foo.png', 2560, 1440)
par(mfrow=c(12, 11))
Vectorize(hist)(df)
dev.off()

更新

为了方便起见,我们可以使用 lapplymisfun 获得漂亮的标题和带有凸点和缺失的标签。

misfun <- \(z) paste(
  paste(c('n', 'm'), table(factor(as.double(is.na(z)), levels=0:1)), sep=':'), 
  collapse=' ')

png('foo2.png', 2560, 1440)
par(mfrow=c(12, 11))
lapply(names(df), \(x) hist(df[[x]], main=x, xlab=misfun(df[x])))
dev.off()


数据:

df <- read.table("https://leicester.figshare.com/ndownloader/files/23581310", sep = ",", header = TRUE, stringsAsFactors = FALSE)

如果您只是在寻找每列中缺失值的数量,而不是真正需要直方图,您可以这样做:

colSums(sapply(df, is.na))

如果你需要这个作为图像,那么用text而不是hist来画会更清楚:

df2 <- data.frame(col = paste(names(df), colSums(sapply(df, is.na)), 
                              sep = '\n \nMissing = '),
                  x = (seq(ncol(df)) - 1) %% 12, 
                  y = 12 - (seq(ncol(df)) - 1) %/% 12)
plot(df2$x, df2$y, type = 'n', xaxt = 'n', yaxt = 'n', xlab = '', ylab = '',
     bty = 'n')
text(df2$x, df2$y, label = df2$col, cex = 0.5)