R 时间序列图x轴的组织比例

R 时间序列图x轴的组织比例,r,ggplot2,R,Ggplot2,这里我有如下数据: # Data df <- data.frame("Hospital" = c("Buge Hospital", "Buge Hospital", "Greta Hospital", "Greta Hospital", "Makor Hospital", "Makor Hospital"), "Period" = c("Jul-18","Aug-18", "Jul-19","

这里我有如下数据:

# Data
df <- data.frame("Hospital" = c("Buge Hospital", "Buge Hospital", "Greta Hospital", "Greta Hospital",
                                "Makor Hospital", "Makor Hospital"),
                 "Period" = c("Jul-18","Aug-18", "Jul-19","Aug-19", "Jul-20","Aug-20"),
                 "Medical admissions" = c(12,56,0,40,5,56),
                 "Surgical admissions" = c(10,2,0,50,20,56),
                 "Inpatient admissions" = c(9,5,6,0,60,96))

#数据

df要解决您的问题,您需要将时段转换为日期格式

例如,您可以使用
lubridate
包中的
parse_date
函数:

库(lubridate)
图书馆(tidyr)
图书馆(dplyr)
df%>%变异(日期=解析日期(如.character(句点),format=“%b-%y”))%>%
pivot_longer(cols=医疗。入院:住院。入院,姓名至=“Var”,值至=“Val”)
#一个tibble:18x5
住院日期Var Val
1布格医院2018年7月18日07月01日医疗入院12
2布格医院2018年7月18日07月01日外科入院10
3布格医院2018年7月18日07月01日住院患者入院9
4布格医院2018年8月18日08月01日医疗入院56
5布格医院2018年8月18日08月01日外科入院2
6布格医院2018年8月18日8月01日住院患者入院5
7格丽塔医院2019年7月19日07月01日医疗入院0
8格丽塔医院2019年7月19日07月01日外科入院
9格丽塔医院2019年7月19日07月01日住院患者6
10格丽塔医院2019年8月19日08月01日医疗入院40
11格丽塔医院2019年8月19日08月01日外科入院50
12格丽塔医院2019年8月19日08月01日住院患者入院0
13 Makor医院2020年7月20日07月01日医疗入院5
14 Makor医院2020年7月20日07月01日外科入院20
15 Makor医院2020年7月20日07月01日住院患者入院60
16 Makor医院2020年8月20日08月01日医疗入院56
17 Makor医院2020年8月20日08月01日外科入院56
18 Makor医院2020年8月20日08月01日住院患者96
因此,您可以使用
scale\u x\u date
在x轴上设置适当的标签选项:

库(lubridate)
图书馆(tidyr)
图书馆(dplyr)
图书馆(GG2)
df%>%变异(日期=解析日期(如.character(句点),format=“%b-%y”))%>%
pivot_longer(cols=Medical.admissions:injection.admissions,name_to=“Var”,value_to=“Val”)%>%
ggplot(aes(x=日期,y=价值,填充=Var,组=Var))+
geom_col()+
比例x日期(日期间隔=“月”,日期标签=“%b%Y”)+
实验室(x=“月”,y=“人数”,fill=“类型”)+
主题(axis.text.x=元素\文本(角度=45,hjust=1))

它回答了你的问题吗


编辑:使用'lubridate v1.7.8

lubridate
1.7.8版上,
parse_date
不再存在。您必须将其替换为
parse_date_time
,如下所示:

库(lubridate)
图书馆(dplyr)
df%>%变异(日期=ymd(解析日期时间2(as.character(Period),orders=“%b-%y”)))%>%。。。。

是否可以显示隐藏月份?请参阅我的更新答案。让我知道它是否是你想要的。它是完美的。非常感谢。
library(ggplot2
# Melt data into long format
df2 <- melt(data = df,
                id.vars = c("Hospital","Period"), 
                measure.vars = names(df[3:5]))

# Stacked barplot
ggplot( df2, aes(x = Period, y = value, fill = variable, group = variable)) +
  geom_bar(stat = "identity") +
  theme(legend.position = "none") +
  ggtitle(unique(df2$Hospital))+
  scale_x_date(date_labels = %Y)+
  labs(x = "Month", y = "Number of People", fill = "Type")