我在 R 中有日期数据,列出了 11 个月内的特定日期,看起来像这样(除了我有更多的数据点):
Intake.Date = c("2023-01-26", "2023-01-26", "2023-01-26", "2023-01-26", "2023-01-26",
"2023-01-26", "2023-01-26","2023-02-02", "2023-01-31", "2023-02-07", "2023-01-31",
"2023-02-16", "2023-02-18", "2023-02-18","2023-03-02", "2023-03-02", "2023-03-02",
"2023-03-06", "2023-03-06", "2023-03-06", "2023-03-08")
我想绘制 2 层图表:一个条形图显示数据中每个月的计数,最上面显示每天的计数。我从这个开始:
ggplot()+
geom_histogram(data = AFOBC_Pathology_Data, mapping = aes(Intake.Date), bins = 11)+
geom_bar(data = AFOBC_Pathology_Data, mapping = aes(Intake.Date), fill = 'cyan')
这接近我想要的,但我知道垃圾箱(灰色条)不正确,因为我知道每个月的日期数量不同。但是,如果我尝试在同一张图表上绘制日期和月份,如下所示:
ggplot()+
geom_bar(data = AFOBC_Pathology_Data, mapping = aes(format(Intake.Date,'%b')), fill = 'grey')+
geom_bar(data = AFOBC_Pathology_Data, mapping = aes(Intake.Date), fill = 'cyan'),
我收到以下错误:
错误:!无法将mapped_discrete()
转换为 . 运行x
查看错误发生的位置。rlang::last_trace()
第二种方法的问题是,在第一个
geom_bar
中,您映射了一个字符串(又名月份缩写,又名x
上的离散变量),而在第二种方法中,它仍然是一个日期。
如果您想让条形显示该月的计数,同时也显示天数,我建议在
ggplot()
之外手动计算计数并使用 geom_rect
,例如类似的东西
library(ggplot2)
library(dplyr, warn=FALSE)
library(lubridate)
AFOBC_Pathology_Data_binned <- AFOBC_Pathology_Data |>
mutate(
month = format(Intake.Date, "%b")
) |>
summarise(
start = floor_date(min(Intake.Date), "month"),
end = ceiling_date(max(Intake.Date), "month"),
count = n(),
.by = "month"
)
ggplot(AFOBC_Pathology_Data) +
geom_rect(
data = AFOBC_Pathology_Data_binned,
aes(
xmin = start, xmax = end,
ymin = 0, ymax = count
),
fill = "grey"
) +
geom_bar(
aes(Intake.Date),
fill = "cyan"
)
数据
AFOBC_Pathology_Data <- data.frame(
Intake.Date = c(
"2023-01-26", "2023-01-26", "2023-01-26", "2023-01-26", "2023-01-26",
"2023-01-26", "2023-01-26", "2023-02-02", "2023-01-31", "2023-02-07", "2023-01-31",
"2023-02-16", "2023-02-18", "2023-02-18", "2023-03-02", "2023-03-02", "2023-03-02",
"2023-03-06", "2023-03-06", "2023-03-06", "2023-03-08"
)
)
AFOBC_Pathology_Data$Intake.Date <- as.Date(AFOBC_Pathology_Data$Intake.Date)