You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

马赛克图标签更新及labeling_args、颜色分配问题求助

解决vcd包马赛克图的两个问题

问题1:labeling_args参数无效(返回NULL)

你的labeling_args参数设置错误,核心是对set_varnames的作用理解偏差:

  • set_varnames的作用是修改变量本身的名称(比如行变量、列变量的名称),而非设置变量的水平标签(行/列名)。
  • 传入矩阵时,mosaic默认行变量名为"Var1"、列变量名为"Var2",你需要针对这两个默认变量名替换成自定义名称,而非直接用Country和Result作为键。

修正后的代码片段:

largs <- list(set_varnames = list(Var1 = "Country", Var2 = "Result"))

注:行/列的水平标签(China/Italy、Survivor/Death)已经通过矩阵的rownames和colnames设置完成,无需在labeling_args中重复操作。

问题2:中国无颜色,仅意大利有颜色

你启用了shade = TRUE,这个参数是根据卡方检验的残差值自动着色:残差接近0(观测值与预期值差异极小)的单元格不会显示颜色,只有残差较大(偏离预期值)的单元格才会着色。从你的数据来看,中国的两个类别(Survivor、Death)观测值与预期值差异极微,因此无颜色;意大利的观测值与预期值差异明显,所以被着色。

如果需要手动指定颜色,需关闭自动着色逻辑,改用gp参数(借助grid包的gpar设置填充色)。单元格的顺序为行优先:China-Survivor → China-Death → Italy-Survivor → Italy-Death,示例代码:

library(vcd)

data <- matrix(c(43649, 7669, 1023, 357), nrow = 2, byrow = TRUE)
rownames(data) <- c("China", "Italy")
colnames(data) <- c("Survivor", "Death")

mosaic(data,
       labeling_args = list(set_varnames = list(Var1 = "Country", Var2 = "Result")),
       shade = FALSE, # 关闭自动着色
       gp = gpar(fill = c("#2E8B57", "#CD5C5C", "#8B0000", "#FFD700")), # 自定义四个单元格颜色
       main = "Mosaicplot for COVID-19 Data",
       xlab = "Result", ylab = "Country", legend = FALSE)

若想保留shade的统计着色逻辑但显示中国区域的颜色,可调整残差阈值,但通常不建议这么做——shade的颜色本就是用来反映统计显著性的。


内容的提问来源于stack exchange,提问作者דניאל שוורץ

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.22 18:52:18