我在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
答案 0 :(得分:0)
您可以绘制两个可能的值:num
和denom
。为简单起见,我将计算这两个值的百分比并绘制pct
。 (但你当然可以选择用num
或denom
来绘制。)
此外,根据您的数据框df
,您有四组值:
您遇到的部分问题是您需要单独绘制每个组,但在使用qicharts2::qic()
或ggplot2::ggplot()
进行绘图时,您不会包含这些组。为此,您必须先将grp1
和grp2
合并为一个组(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()
但是你应该不在一个控制图上绘制多个组。控制图上的控制限制基于单个序列(组&#39; s)历史值。如果您在同一控制图上绘制所有四个组,您将获得四组控制限制,这将导致非常混乱(几乎不可能读取/解释)的控制图。
相反,你应该绘制四个控制图,每组一个。
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
函数)。请参阅参考手册here。
然而,可能的解决方法是将日期变量转换为因子并使用它。这种方法的缺点是没有连接点的线。
# 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"
)