0

我对 qic 图表有疑问 - 控制图表。我的 x.axis 没有绘制我想要的所有日期。我将日期四舍五入为每 14 天一次,周期为 59 周。我想要所有这些都被绘制出来,但是我对此有一些问题,并且在网上找不到任何东西。然而,我是控制图的新手。

这是一个示例,但不是原始数据,因此在此示例中此处的周数较少,但只要绘制了所有日期就无关紧要。

重现数据:

df <- data.frame(x = rep(1:24, 4), 
ReportMonth = (rep(seq(as.Date('2014-1-1'),
                               length.out = 24,
                               by = 'month'),
                                4)),
             num = rbinom(4 * 24, 100, 0.5),
             denom = round(runif(4 * 24, 90, 110)),
             grp1 = rep(c('g', 'h'), each = 48),
             grp2 = rep(c('A', 'B'), each = 24))
df

并作图

qic(x= ReportMonth,
y= num,
n= denom,
data=df, 
chart= "i",
x.format="%Y-%m-%d",
x.angle = 90,
y.expand = 40, # where to start y axis from
xlab = "Month",
ylab= "Value")

我已经尝试过 ggplot2 了,我还没有成功。

 library(ggplot2)
 library(plyr)

 p3.1 <- rename(p3, c("x" = "Date"))
 p3.1$Date<-as.Date(p3.1$x, format="%Y/%m/%d")

 plot4 <- ggplot(p3.1, aes(x = Date,y = y )) +
 geom_ribbon(ymin = p3.1$lcl, ymax = p3.1$ucl, alpha = 0.4) +   # fill = ""
 geom_line(colour = "blue", size = .75) + 
 geom_line(aes(Date, cl)) +
 geom_point(colour = "red" , fill = "red", size = 1.5) +
 #x.axis(1, p3$x, format(p3$x, "%Y-%m-%d"), cex.axis = 0.7)+
 ggtitle(label = "Readmissions within 30 days") +
 labs(x = NULL, y = NULL)+
 theme_minimal()+
 theme(axis.text.x = element_text(angle = 90, hjust = 1))

#aes(x = format(ActiveDate,"%Y-%m"), group = 1)) + geom_line(stat = "count") 
#+ theme(axis.text.x = element_text(angle = 90, hjust = 1)) 

plot4
4

1 回答 1

0

您有两个可能的值来绘制:numdenom。为简单起见,我将计算这两个值和 plot 的百分比pct。(但您当然可以选择绘图numdenom代替。)

此外,根据您的数据框,df您有四组值:

  • 第 1 组:grp1 = g,grp2 = A
  • 第 2 组:grp1 = h,grp2 = A
  • 第 3 组:grp1 = g,grp2 = B
  • 第 4 组:grp1 = h,grp2 = B

您遇到的部分问题是您需要分别绘制每个组,但是当您使用qicharts2::qic()or绘制时,您不包括这些组ggplot2::ggplot()。为此,您必须先将grp1grp2合并为一个组 ( grp)。

library(tidyverse)
library(qicharts2)

df_2 <- 
  df %>% 
  # calculate percent
  mutate(pct = round(num/denom, digits = 2)) %>%
  # collapse grp1 and grp2 to make single grp column
  unite(grp1, grp2, col = "grp")

head(df_2)
  x ReportMonth num denom grp  pct
1 1  2014-01-01  46   100 g_A 0.46
2 2  2014-02-01  54   105 g_A 0.51
3 3  2014-03-01  49   100 g_A 0.49
4 4  2014-04-01  56    94 g_A 0.60
5 5  2014-05-01  54   102 g_A 0.53
6 6  2014-06-01  48   106 g_A 0.45

在折线图(时间序列)上绘制多个组是非常好的。

ggplot(df_2, aes(x = ReportMonth, y = pct, color = grp)) +
  geom_line() +
  scale_x_date(date_breaks = "2 months", date_labels = "%b '%y") +
  scale_y_continuous(labels = scales::percent) +
  theme_minimal()

在此处输入图像描述

但是您不应该单个控制图上绘制多个组。控制图上的控制限基于单个系列(组)的历史值。如果您在同一个控制图上绘制所有四个组,您将获得四组控制限制,这将导致控制图非常混乱(几乎无法阅读/解释)。

相反,您应该绘制四个控制图,每组一个。

df_2 %>% 
  # nested dataframe
  split(.$grp) %>% 
  # apply qic
  purrr::map(~ qicharts2::qic(
    ReportMonth, pct, 
    data = ., 
    chart = "i", # choose an appropriate control chart
    title = paste("Group:", unique(.$grp)),
    xlab = "ReportMonth",
    ylab = "pct"
    ))

在此处输入图像描述

编辑:

我找不到任何qicharts2::qic()指定中断的参数(类似于 中的scale_x_date(breaks = ...)函数ggplot)。请参阅此处的参考手册。

但是,一种可能的解决方法是将日期变量转换为一个因子并改用它。这种方法的缺点是没有连接点的线。

# Set levels for date variable -- ensure they are unique.
ReportMonth_levels <- format( unique(df_2$ReportMonth), "%b %y")

df_3 <- 
  df_2 %>% 
  # convert date variale to a factor with set levels
  mutate(ReportMonth = factor( format(ReportMonth, "%b %y"), levels = ReportMonth_levels))

df_3 %>% 
  qicharts2::qic(
    ReportMonth, pct, 
    data = ., 
    facets = ~ grp, # put all groups on one chart
    y.percent = TRUE,
    x.angle = 45,
    chart = "i", # choose an appropriate control chart
    xlab = "ReportMonth",
    ylab = "pct"
  )

在此处输入图像描述

于 2018-06-12T12:26:18.797 回答