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”样式,具体步骤如下:
- 处理日期格式并生成目标标签
先确保日期列是标准格式,再提取每月第一天并转换为你需要的显示样式:
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"))
- 按月度聚合统计数据
根据需求对数据进行月度分组计算(以下以统计月度累计接种总数为例,可替换为你需要的字段):
monthly_summary <- monthly_data %>% group_by(month_label, month_start) %>% summarise(total_vacc = sum(total_vaccinations, na.rm = TRUE)) %>% # 按日期排序,保证X轴顺序正确 arrange(month_start)
- 绘制直方图
使用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
相关产品推荐
相关产品推荐

