如何在 R 中在月份数据之上绘制天数数据

问题描述 投票:0回答:1

我在 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()
查看错误发生的位置。

r date ggplot2 bar-chart histogram
1个回答
0
投票

第二种方法的问题是,在第一个

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)
© www.soinside.com 2019 - 2024. All rights reserved.