簡體   English   中英

如何 plot 1x1 列聯表的鑲嵌圖?

[英]How to plot a mosaicplot for a 1x1 contingency table?

繪制 1×1 列聯表會返回錯誤:

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

據我所知,馬賽克圖 function 中的代碼不允許 plot 1×1 表。 但是,如何plot 該表的馬賽克圖?


背景。

我正在繪制一系列動態創建的表,其中一些有時恰好只有一列和一行,有時它們有更多維度。 在這一系列馬賽克圖中有一個不可分割的矩形是有價值的信息,並且在該視覺表示中很容易掌握。

一種可能性是強制將要繪制的變量作為factor並指定levels的可能結果(按所需順序)。 然后零計數單元將表示為細線。

dat[] = lapply(dat, factor, levels = c(TRUE, FALSE))
mosaicplot(table(dat))

在此處輸入圖像描述

如果您不想要@Henrik的(太好了! )解決方案的細線,您可以用自定義 plot function 替換一維案例。

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))

在此處輸入圖像描述

在您的 function 中執行以下操作:

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))

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM