如何为 1x1 意外事件 table 绘制马赛克图?
How to plot a mosaicplot for a 1x1 contingency table?
绘制 1×1 意外事故 table returns 一个错误:
dat <- read.table(textConnection('
foo bar
TRUE TRUE
TRUE TRUE
'), header = TRUE, colClasses=c('logical', 'logical'))
mosaicplot(table(dat))
Error in rep.int(0, ydim) : invalid 'times' value
,mosaicplot 函数中的代码不允许绘制 1×1-table。但是,如何做我绘制了那个table的马赛克图?
背景。
我正在绘制一系列动态创建的 table,其中一些有时恰好只有一列和一行,有时它们有更多维度。在该系列马赛克图中有一个未分割的矩形是有价值的信息,并且在该视觉表示中很容易掌握。
一种可能性是将要绘制的变量强制设置为 factor
并在 levels
中指定可能的结果(按所需顺序)。然后零计数细胞将被表示为细线。
dat[] = lapply(dat, factor, levels = c(TRUE, FALSE))
mosaicplot(table(dat))
如果您不想要 @Henrik 的(太棒了!)解决方案的细线,您可以用一维替代具有自定义绘图功能的案例。
mpOneDim <- function(tbl, title="table(dat)") {
dn <- attr(tbl, "dimnames")
labs <- names(dn)
levels <- unlist(dn)
plot.new()
rect(0.0125, -.035, .985, .99, col="gray", border=1)
mtext(title, line=1.55, font=2, cex=1.2)
mtext(labs[1], 1, 1)
mtext(labs[2], 2, 1)
mtext(levels[2], 2, -1.15, cex=.7)
mtext(levels[2], 3, -.75, cex=.7)
}
mpOneDim(table(dat))
在你的函数中做这样的事情:
if (sum(dim(table(dat))) <= 2) {
mpOneDim(table(dat))
} else {
mosaicplot(table(dat))
}
数据:
dat <- structure(list(foo = c(TRUE, TRUE), bar = c(TRUE, TRUE)), class = "data.frame", row.names = c(NA,
-2L))
绘制 1×1 意外事故 table returns 一个错误:
dat <- read.table(textConnection('
foo bar
TRUE TRUE
TRUE TRUE
'), header = TRUE, colClasses=c('logical', 'logical'))
mosaicplot(table(dat))
Error in rep.int(0, ydim) : invalid 'times' value
背景。
我正在绘制一系列动态创建的 table,其中一些有时恰好只有一列和一行,有时它们有更多维度。在该系列马赛克图中有一个未分割的矩形是有价值的信息,并且在该视觉表示中很容易掌握。
一种可能性是将要绘制的变量强制设置为 factor
并在 levels
中指定可能的结果(按所需顺序)。然后零计数细胞将被表示为细线。
dat[] = lapply(dat, factor, levels = c(TRUE, FALSE))
mosaicplot(table(dat))
如果您不想要 @Henrik 的(太棒了!)解决方案的细线,您可以用一维替代具有自定义绘图功能的案例。
mpOneDim <- function(tbl, title="table(dat)") {
dn <- attr(tbl, "dimnames")
labs <- names(dn)
levels <- unlist(dn)
plot.new()
rect(0.0125, -.035, .985, .99, col="gray", border=1)
mtext(title, line=1.55, font=2, cex=1.2)
mtext(labs[1], 1, 1)
mtext(labs[2], 2, 1)
mtext(levels[2], 2, -1.15, cex=.7)
mtext(levels[2], 3, -.75, cex=.7)
}
mpOneDim(table(dat))
在你的函数中做这样的事情:
if (sum(dim(table(dat))) <= 2) {
mpOneDim(table(dat))
} else {
mosaicplot(table(dat))
}
数据:
dat <- structure(list(foo = c(TRUE, TRUE), bar = c(TRUE, TRUE)), class = "data.frame", row.names = c(NA,
-2L))