似乎有什么东西(很多东西?)我不明白如何在包mosaic和labeling_cells中使用vcd,因为我一直收到一个错误。
设置:
我有一个2d值数组(行名和列名被更改以保护无辜的人):
tmparray
C1 C2 C3 C4 C5 C6
P1 65241 15534 5754 12747 57902 48367
P2 205 28581 4819 7617 5504 34656
P3 27 3503 1473 757 3308 15363
P4 417580 5967 5353 636 514 9758
P5 31482 915 249 914 328 1301
P6 75501 4307 294 176 27 8376
P7 43589 2864 465 179 61 12631
P8 64095 1008 335 288 3 7438mosaic(tmparray)给了我预期的情节(代表太低,无法发布图片)。
我想为每个单元格添加文本标签,只显示tmparray > 1000中的值。在labeling_cells文档之后,我尝试如下:
celltxt <- ifelse(tmparray < 1000, NA, tmparray/1000)
celltxt
C1 C2 C3 C4 C5 C6
P1 65.241 15.534 5.754 12.747 57.902 48.367
P2 NA 28.581 4.819 7.617 5.504 34.656
P3 NA 3.503 1.473 NA 3.308 15.363
P4 417.580 5.967 5.353 NA NA 9.758
P5 31.482 NA NA NA NA 1.301
P6 75.501 4.307 NA NA NA 8.376
P7 43.589 2.864 NA NA NA 12.631
P8 64.095 1.008 NA NA NA 7.438
labeling_cells(text = celltxt)(tmparray)这将导致以下错误:
# Error in ifelse(abbreviate_varnames, sapply(seq_along(dn), function(i) abbreviate(dn[i], : replacement has length zero有人能指出如何使标签工作吗?
发布于 2014-05-19 20:11:26
好的,我假设是class(tmparray)=="matrix"。这似乎很适合绘图,但如果您想要使用labeling_cells,则需要将其转换为表,一定要添加命名的维度。你可以用
tmparray <- as.table(tmparray)
names(dimnames(tmparray))<-c("P","C")所以当您现在创建celltext时
celltxt <- ifelse(tmparray < 1000, NA, tmparray/1000)它还将是一个具有相同dimnames的表。
您必须做的另一件重要事情是将pop=F传递给mosaic。这将使网格视图结构就位,以便labeling_cells函数能够找到标签的正确位置。这样你就可以用
mosaic(tmparray , pop=F)
labeling_cells(text = celltxt, margin=0)(tmparray)这会导致

(我把这些值舍入小数点后一位,试图使事情变得更整洁)
https://stackoverflow.com/questions/23745201
复制相似问题