如何将R语言mosaicplot单元格内标签居中并添加p值与图例?
实现带计数百分比、p值和图例的马赛克图
base R自带的mosaicplot功能有限,要实现你需要的单元格居中显示计数+百分比、添加图例和p值的效果,推荐使用vcd包的mosaic()函数,它专门用于可视化列联表,功能更灵活。
完整实现代码
# 安装并加载vcd包(首次使用需安装) install.packages("vcd") library(vcd) # 构建数据矩阵 mosaictable <- matrix(c(3, 9, 22, 21), byrow = TRUE, ncol = 2) rownames(mosaictable) <- c("White", "Blue") colnames(mosaictable) <- c("Captured", "Not Captured") # 计算卡方检验的p值(用于统计显著性展示) chisq_result <- chisq.test(mosaictable) p_val <- round(chisq_result$p.value, 4) # 绘制增强版马赛克图 mosaic(mosaictable, main = paste("Mosaic Plot of Pigeon Color and Capture Rate\np-value =", p_val), sub = "Pigeon Color", ylab = "Relative frequency", col = c("firebrick", "goldenrod1"), font = 2, # 配置单元格标签:显示计数+百分比并居中 labeling_args = list( labels = list( counts = TRUE, percents = TRUE, # 自定义标签格式:计数 + 换行 + 行百分比(也可改为总百分比) fun = function(x) paste0(x, "\n", round(100 * x / sum(x), 1), "%") ), just = "center" # 标签居中对齐 ), legend = TRUE # 自动添加颜色对应分组的图例 )
关键功能说明
- 单元格标签:通过
labeling_args设置counts = TRUE显示原始计数,percents = TRUE结合自定义fun生成百分比,just = "center"让标签居中。 - p值添加:先通过
chisq.test()计算列联表的卡方检验p值,再将其嵌入到图标题中,直观展示统计关联的显著性。 - 图例:设置
legend = TRUE即可自动生成对应行分组(White/Blue)的颜色图例,无需手动绘制。
内容的提问来源于stack exchange,提问作者Sourish Rakshit
相关产品推荐
相关产品推荐

