You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

R语言中如何制作X轴为‘1 April’格式日期的直方图

问题:将日期转换为“1 April”格式用于直方图X轴

我正尝试制作一个X轴显示日期(例如底部显示“1 April”“1 May”“1 June”等格式)的直方图,但遇到了困难。我已编写以下代码进行数据读取、缺失值处理及月度分组,但不知道如何将日期转换为所需格式,恳请提供建议:

library(readr)
library(tidyverse)

# 读取数据
vaccination_data <- read_csv("https://raw.githubusercontent.com/dsfsi/covid19za/master/data/covid19za_provincial_cumulative_timeline_vaccination.csv")

# 去除空值
vaccination_data1 <- na.omit(vaccination_data)

# 尝试月度分组(现有代码)
monthly_data <- vaccination_data1
monthly_data$year <- strftime(monthly_data$date, "%y")
monthly_data$month <- strftime(monthly_data$date, "%m")

解决方案

利用lubridate包(已包含在tidyverse中)可简化日期处理,直接将日期转换为每月第一天并格式化为“1 Month”样式,具体步骤如下:

  1. 处理日期格式并生成目标标签
    先确保日期列是标准格式,再提取每月第一天并转换为你需要的显示样式:
library(lubridate)

monthly_data <- vaccination_data1 %>%
  # 确保date为标准日期类型(read_csv通常已自动识别,此步为保险操作)
  mutate(date = ymd(date)) %>%
  # 提取每月第一天的日期
  mutate(month_start = floor_date(date, "month")) %>%
  # 格式化为"1 April"样式的标签
  mutate(month_label = format(month_start, "%d %B"))
  1. 按月度聚合统计数据
    根据需求对数据进行月度分组计算(以下以统计月度累计接种总数为例,可替换为你需要的字段):
monthly_summary <- monthly_data %>%
  group_by(month_label, month_start) %>%
  summarise(total_vacc = sum(total_vaccinations, na.rm = TRUE)) %>%
  # 按日期排序,保证X轴顺序正确
  arrange(month_start)
  1. 绘制直方图
    使用ggplot2绘制直方图,X轴直接使用格式化后的标签:
ggplot(monthly_summary, aes(x = month_label, y = total_vacc)) +
  geom_col(fill = "#2E86AB") +
  labs(
    x = "日期",
    y = "月度累计接种数",
    title = "新冠疫苗月度累计接种统计"
  ) +
  theme(axis.text.x = element_text(angle = 45, hjust = 1)) # 旋转X轴标签避免重叠

内容的提问来源于stack exchange,提问作者Jedo0w0

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.21 05:06:28