Tenho um conjunto de dados que é uma lista de casos únicos com uma data de ocorrência ( Date.of.admission
).
Gostaria de plotar casos por semana (usando um histograma) usando a data de início da semana como rótulos do eixo x (ou seja, não o número da semana). Eu olhei para outros exemplos disso usando floor_date()
e outras funções, mas não consegui fazer funcionar para mim.
Alterei o formato da data de Date.of.admission
:
library(dplyr)
library(lubridate)
library(ggplot2)
class(df1$Date.of.admission)
ymd("2025-03-05")
df1 <- df1 %>%
mutate(Date.of.admission = lubridate::ymd(Date.of.admission))
class(df1$Date.of.admission)
Então eu defino uma data de início e término:
start_date <- ymd("2023-12-11")
end_date <- ymd("2025-03-31")
Então tracei os casos:
ggplot(df1)+
geom_histogram(aes(Date.of.admission), binwidth = 2, color = "black", fill= "black")+
labs(x = "Admission date",
y= "Weekly cases")+
theme(axis.text.x = element_text(angle = 45, vjust = 1, hjust=1))+
scale_x_date(labels=date_format("%d %b %y"), date_breaks="30 days", limits=c(start_date, end_date))
Entretanto, em vez de casos diários, como mostra este gráfico, eu gostaria que eles aparecessem como casos por semana, com a data de início da semana no eixo x.
Muito obrigado!
Dados:
structure(list(Case.no. = 1:65, case.likelihood = c(NA, NA, NA,
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA), Date.of.admission = c("23/08/2024",
"3/09/2024", "15/09/2024", "11/09/2024", "3/01/2024", "18/01/2024",
"5/02/2024", "15/02/2024", "22/02/2024", "24/03/2024", "26/04/2024",
"18/05/2024", "20/05/2024", "27/05/2024", "18/06/2024", "11/07/2024",
"21/07/2024", "2/08/2024", "5/09/2024", "5/09/2024", "4/04/2024",
"7/02/2024", "7/12/2024", "9/12/2024", "10/08/2024", "11/03/2024",
"12/03/2024", "13/06/2024", "14/12/2023", "18/07/2024", "25/03/2024",
"27/01/2024", "27/02/2024", NA, "16/09/2024", "15/09/2024", "17/09/2024",
"23/10/2024", "16/10/2024", "16/10/2024", "27/11/2024", "7/11/2024",
"7/11/2024", "12/10/2024", "8/10/2024", "5/11/2024", "25/10/2024",
"24/10/2024", "30/11/2024", NA, "3/01/2025", "6/01/2025", "6/01/2025",
"8/01/2025", "8/01/2025", "22/12/2024", "13/01/2025", "4/01/2025",
"26/12/2024", "6/01/2025", "18/01/2025", "23/01/2025", NA, "15/03/2025",
"5/03/2025"), Zoo.ID.or.name = c("M2409108", NA, "M2409115 'Heritage'",
"M2409114 'Sloane'", NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,
NA, NA, NA, NA, "M2409117", "M2409116", "M2409113 'Chicago'",
"20241023SM\n", NA, NA, "M2410126", "M2412133 'Chloe2'", "Chloe3'",
"Scout", "Alana", "Paul", "Holgate", "Vasse", "M2411128 \"Zingy\"",
"M2412136 ", NA, NA, NA, NA, NA, "M2412144", "Tonkin", "Georgie",
"Mandy", "Flic", NA, NA, NA, NA, NA)), class = "data.frame", row.names = c(NA,
-65L))
Você deve usar um gráfico de barras em vez de um histograma para contagens semanais, o que requer alguma manipulação de dados primeiro:
Se você preferir mais (ou menos) rótulos do eixo x, você pode ajustar o "7" na última linha (`breaks=seq()`) para um número menor (ou maior).
Tente
aggregate
ebarplot
.Observação:
'%Y-%V'
fornece semanas ISO. Se quiser semanas dos EUA, use'%Y-%U'
.