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

如何绘制类似R Cookbook的三维马赛克图?格式调整求助

解决R马赛克图第三维度展示与格式调整问题

核心问题分析

你遇到的报错和布局异常,主要源于列联表维度顺序错误,以及base包mosaicplot对多维度数据的支持局限。你的长格式数据结构是合理的(3列因子:variable(变量类别)、value(0/1分类)、nAP_CAT(Control/Case Day)),但需要调整变量在图中的映射顺序,同时换用vcd包更强大的mosaic()函数来实现需求。

具体解决方案

1. 安装并加载vcd包

# 首次使用先安装包
install.packages("vcd")
library(vcd)

2. 用公式语法指定变量映射(直观不易出错)

通过公式直接定义各变量对应的轴和分组,完全匹配你的需求:

  • X轴:variable(所有变量类别并排展示)
  • X轴内部分组:value(每个变量下拆分0/1两类)
  • Y轴:nAP_CAT(Control Day/Case Day上下拆分)

代码如下:

mosaic(~ variable + value | nAP_CAT, 
       data = long,
       direction = c("v", "h"),  # 指定variable垂直(X轴)排列,value水平(X内部分组),nAP_CAT水平(Y轴)
       col = c("darkblue", "red"),  # 0/1分类的填充色
       main = "Mosaic Plot: Variable vs 0/1 Class by Group",
       labeling_args = list(set_varnames = c(variable = "Variable Category", value = "0/1 Class", nAP_CAT = "Group"))
)

3. 若坚持使用base包mosaicplot

需先构建顺序正确的列联表,再调整布局方向:

# 构建三维列联表,顺序为:variable(X轴)→ value(X内部分组)→ nAP_CAT(Y轴)
tab <- table(long$variable, long$value, long$nAP_CAT)

# 绘制马赛克图,指定各维度的排列方向
mosaicplot(tab,
           direction = c("v", "h", "v"),
           col = c("darkblue", "red"),
           main = "Mosaic Plot - Base R Version",
           xlab = "Variable Category",
           ylab = "Control Day vs Case Day"
)

关键注意事项

  • 确保long数据框的三列都是因子类型,若不是可提前转换:
    long$variable <- factor(long$variable)
    long$value <- factor(long$value)
    long$nAP_CAT <- factor(long$nAP_CAT)
    
  • direction参数控制维度排列方向:"v"代表垂直(上下/Y轴),"h"代表水平(左右/X轴),顺序需与列联表的维度顺序对应。

内容的提问来源于stack exchange,提问作者fish_out_of_water

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 00:46:00