如何在R中创建Minitab风格Multi-Vari图?mvPlot、multivari无法使用
在R中绘制Minitab风格Multi-Vari图的替代方案
方案1:用ggplot2手动构建(最灵活可控)
Minitab的Multi-Vari图核心是展示连续变量在多因子分组下的均值、波动范围,我们可以用ggplot2手动实现这个逻辑,完全不依赖冷门函数:
步骤1:构造示例数据
set.seed(123) data <- expand.grid(machine = factor(c(1,2)), setting = factor(c(1,2,3)), replicate = 1:5) data$diameter <- rnorm(nrow(data), mean = 10 + as.numeric(data$machine)*0.5 + as.numeric(data$setting)*0.3, sd = 0.2)
步骤2:计算分组统计量
先按machine和setting分组,计算每组的均值、最小值、最大值(对应Multi-Vari图的中心和波动范围):
library(dplyr) summary_data <- data %>% group_by(machine, setting) %>% summarise(mean_diam = mean(diameter), min_diam = min(diameter), max_diam = max(diameter), .groups = "drop")
步骤3:绘制Multi-Vari图
library(ggplot2) ggplot(summary_data, aes(x = setting, y = mean_diam, color = machine, group = machine)) + # 绘制均值连线 geom_line(linewidth = 1) + # 绘制均值点 geom_point(size = 3) + # 绘制上下波动范围(对应组内的min-max) geom_errorbar(aes(ymin = min_diam, ymax = max_diam), width = 0.2) + # 调整样式贴近Minitab风格 labs(x = "Setting", y = "Diameter", color = "Machine") + theme_bw() + theme(panel.grid.major = element_blank(), panel.grid.minor = element_blank())
这个图会展示每个machine-setting组合的直径均值,以及组内的波动范围,和Minitab的Multi-Vari图逻辑一致。
方案2:修复qcc包的multivari函数报错
你遇到的multivari函数报错大概率是数据格式问题,该函数要求输入的分组变量必须是因子类型,且数据结构符合要求。试试以下修正后的代码:
确保数据格式正确
# 转换分组变量为因子 data$machine <- factor(data$machine) data$setting <- factor(data$setting) # 调用multivari函数(qcc包) library(qcc) multivari(diameter ~ machine + setting, data = data)
如果还是报错,检查是否有缺失值,或者分组是否存在空组(某个machine-setting组合没有数据),删除空组即可解决递归索引的问题。
方案3:用lattice包快速绘制
lattice包的xyplot也可以快速实现类似效果:
library(lattice) xyplot(diameter ~ setting | machine, data = data, type = c("p", "a", "g"), # 点、均值线、网格 ylab = "Diameter", xlab = "Setting", main = "Multi-Vari Plot by Machine and Setting")
这个图会按machine分面,每个面展示不同setting下的直径分布和均值趋势,也是Multi-Vari图的一种表现形式。
内容的提问来源于stack exchange,提问作者user20007012
相关产品推荐
相关产品推荐

