马赛克图标签更新及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,提问作者דניאל שוורץ
相关产品推荐
相关产品推荐

