![](/img/trans.png)
[英]mosaic()-function of the vcd package: error in adding text in the cells
[英]labeling_cells function with 2d mosaic
似乎有些事情(很多事情?)我不了解如何在软件包vcd
和labeling_cells
使用mosaic
,因为我不断遇到错误。
设定:
我有一个二维数组(更改行和列名以保护无辜):
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 7438
mosaic(tmparray)
我提供了预期的绘图(rep太低而无法发布图像)。
我想为每个单元格添加文本标签,仅显示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
谁能指出如何使标签生效?
好的,所以我假设使用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
函数可以找到labeling_cells
的正确位置。 所以你可以用
mosaic(tmparray , pop=F)
labeling_cells(text = celltxt, margin=0)(tmparray)
导致
(我确实将这些值四舍五入到小数点后一位,以使内容更整洁)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.