labeled_cells功能与2d马赛克

时间:2014-05-19 18:57:04

标签: r

似乎有些东西(很多东西?)我不明白如何在mosaic包和vcd中使用labeling_cells因为我一直收到错误。< / p>

设定:

我有一个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  7438

mosaic(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

有人可以指出如何让标签生效吗?

1 个答案:

答案 0 :(得分:2)

好的,所以我假设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)

结果如何 mosaic plot with labels

(我将值舍入到小数点后一位,试图让事情变得更整洁)