如何将qcc生成的u控制图标签从默认校准数据、新数据改为Old与New?
qcc包u型控制图自定义图例标签方法
标签不生效的原因
传入data.name = "Old"、newdata.name = "New"参数无法修改图上标签,是因为qcc包绘制u型、c型等计数类控制图时,图例文本在底层绘图代码中是硬编码的固定字符串,没有对接用户传入的名称参数,因此默认固定显示“Calibration data”“New data”,不会读取传入的自定义名称。
可落地的修改方案
单次绘图:图生成后直接替换图例
正常运行qcc绘图代码生成基础图后,调用legend()函数在原图图例位置生成匹配样式的新图例,替换原有默认文本即可,完整可运行代码:
dat <- data.frame(id = c(1:10), num = sample(1:10), den = c(11:20)) # 生成基础u控制图 qcc::qcc(data = dat$num[1:5], sizes = dat$den[1:5], newdata = dat$num[6:10], newsizes = dat$den[6:10], type = "u", plot = T) # 替换自定义文本图例,匹配原图样式 legend( x = "topright", legend = c("Old", "New"), pch = c(1, 3), # 匹配原图点样式:基准组为实心圆点,新增组为十字标记 col = c("black", "red"), # 匹配原图点颜色 bty = "o" # 保留原图图例边框 )
频繁绘图:临时修改绘图函数的硬编码文本
如果需要批量绘制u控制图,不想每次手动添加图例替换代码,可以在当前R会话中临时调整qcc包的内部绘图逻辑,把硬编码的固定文本替换为自定义值。这种修改仅对当前R会话有效,不会改动本地安装的包文件,重启R后自动恢复默认设置,操作代码:
# 提取qcc内置的绘图函数 custom_plot <- qcc:::plot.qcc # 替换函数内部硬编码的图例文本 custom_body <- do.call( substitute, list( body(custom_plot), list( "Calibration data" = "Old", "New data" = "New" ) ) ) body(custom_plot) <- custom_body # 将修改后的函数绑定到qcc的命名空间 assignInNamespace("plot.qcc", custom_plot, ns = "qcc")
运行这段代码后,后续直接调用qcc()函数绘制u型控制图,生成的图例就会直接显示自定义的“Old”和“New”文本,无需额外手动调整。
内容的提问来源于stack exchange,提问作者Y. Z.
相关产品推荐
相关产品推荐

