如何绘制类似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
相关产品推荐
相关产品推荐

