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

qicharts2包qic函数:能否为不同分面配置独立的中心线与控制限?

qicharts2包qic()函数分面使用不同part参数的解决方法

问题说明

在qicharts2包(v0.7.5)的qic()函数中,用户原本期望通过设置长度为2的part参数,让每个元素对应一个分面,从而实现不同分面用各自的part值计算中心线与控制限,但实际效果是两个part值会被同时应用到所有分面,无法达到预期。

解决思路与方法

qic()函数本身的part参数不支持直接按分面映射不同取值,要实现需求,得拆分数据后单独绘制控制图,再合并成分面效果,具体步骤如下:

  • 按分面变量(示例中是gender)拆分数据集
  • 对每个子数据集单独调用qic(),设置对应的part参数
  • 用patchwork包将多个控制图合并,模拟分面展示

示例代码

library(qicharts2)
library(dplyr)
library(patchwork)

# 预处理数据(和原示例一致)
cabg <- cabg %>% mutate(month = as.Date(cut(date, 'month')))

cabg_by_month_gender <- cabg %>% 
  group_by(month, gender) %>% 
  summarise(readmissions = sum(readmission),
            n = n(),
            .groups = "drop")

# 按gender拆分数据
data_list <- split(cabg_by_month_gender, cabg_by_month_gender$gender)

# 分别绘制控制图,设置对应part参数
p1 <- qic(month, readmissions, n,
          data      = data_list[[1]],
          chart     = 'p',
          y.percent = TRUE,
          title     = '30天内再入院率(P图)- 男性',
          ylab      = '',
          xlab      = '月份',
          part      = 10)

p2 <- qic(month, readmissions, n,
          data      = data_list[[2]],
          chart     = 'p',
          y.percent = TRUE,
          title     = '30天内再入院率(P图)- 女性',
          ylab      = '',
          xlab      = '月份',
          part      = 20)

# 合并分面,可设置ncol调整排列方式(1列/2列)
p1 + p2 + plot_layout(ncol = 2)

补充优化

如果需要统一的整体标题和样式,可以在合并后调整:

(p1 + p2) + 
  plot_annotation(title = '30天内再入院率(P图)',
                  subtitle = '按性别分组,各分组使用独立part参数计算控制限') &
  theme(plot.title = element_text(hjust = 0.5))

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.18 05:35:00