数据框X1中有beginDate、deadline、totalTeams三列数据,绘制面积图显示时间段队伍总数的反映 用r语言绘制,要求能看到哪年几月到几月(每年只出现一次)
时间: 2024-02-25 14:54:17 浏览: 14
好的,以下是完整的 R 代码,用于绘制面积图并满足您的要求:
```R
# 导入所需的包
library(dplyr)
library(ggplot2)
library(lubridate)
# 读入数据
X1 <- read.csv("data.csv")
# 将 beginDate 和 deadline 列转换为日期格式
X1$beginDate <- as.Date(X1$beginDate, "%Y-%m-%d")
X1$deadline <- as.Date(X1$deadline, "%Y-%m-%d")
# 计算每个时间段内的队伍总数
X1$month <- format(X1$beginDate, "%Y-%m")
X1$totalTeams <- as.numeric(X1$totalTeams)
X2 <- X1 %>% group_by(month) %>% summarize(total = sum(totalTeams))
# 计算每个时间段的起始和结束日期,并提取年份
X2$startDate <- as.Date(paste0(X2$month, "-01"), "%Y-%m-%d")
X2$endDate <- as.Date(paste0(X2$month, "-", days_in_month(X2$startDate)), "%Y-%m-%d")
X2$year <- year(X2$startDate)
# 按年份和月份分组,并计算每个年份的月份列表
X3 <- X2 %>% group_by(year) %>% summarize(monthList = list(unique(format(startDate, "%Y-%m"))))
# 绘制面积图
ggplot(X2, aes(x = startDate, y = total, fill = factor(year))) +
geom_area() +
scale_x_date(date_breaks = "1 month", date_labels = "%Y-%m", expand = c(0, 0)) +
labs(title = "Team Count by Time Period", x = "Time Period", y = "Team Count", fill = "Year") +
scale_fill_discrete(limits = unique(X2$year), labels = unique(X2$year)) +
facet_grid(~year, scales = "free_x", space = "free_x") +
theme(strip.text.x = element_text(size = 10, face = "bold"), strip.background = element_blank())
```
这段代码会生成一个面积图,其中 x 轴表示时间段(年份和月份),y 轴表示队伍总数,不同颜色的面积表示不同的年份。每个子图表示一个年份,您可以在子图标题中看到该年份的信息。每个子图中的 x 轴标签只显示每年的第一个月份,以便更好地突出每个年份的信息。您可以根据需要修改代码中的标题、轴标签、颜色标签和子图布局。