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

R语言:如何过滤工资数据集特定月份或让X轴仅显示年份?

问题与解决方案

问题描述

拥有一份包含10年两性小时工资率的数据集,列包含Males、Females和Date,每行对应每年的12个月份。现有ggplot折线图代码,需实现两个需求:

  1. 过滤每年的1月、6月、12月数据来绘制折线图;
  2. X轴仅显示年份,但保留所有筛选后月份的数据点。

修改后的完整代码

# 加载必要包
library(ggplot2)
library(ggrepel)
library(lubridate)

# 读取数据并处理日期
wage_data <- read.csv("Final.csv")
wage_data$Date <- as.Date(wage_data$Date, format = "%m/%d/%Y")

# 过滤每年1月、6月、12月的数据
filtered_data <- wage_data[month(wage_data$Date) %in% c(1,6,12), ]

# 计算过滤后数据的极值
# 女性工资极值
max_female <- filtered_data[which.max(filtered_data$Females), ]
min_female <- filtered_data[which.min(filtered_data$Females), ]
# 男性工资极值
max_male <- filtered_data[which.max(filtered_data$Males), ]
min_male <- filtered_data[which.min(filtered_data$Males), ]

# 绘制折线图
ggplot(filtered_data, aes(x = Date)) +
  # 女性数据点与折线
  geom_point(aes(y = Females), size = 2, alpha = 0.3, color = "red") +
  geom_line(aes(y = Females), size = 0.5, color = "red") +
  geom_label_repel(data = rbind(max_female, min_female), aes(y = Females, label = round(Females, 2)), 
                   size = 4, color = "red", nudge_y = 1) +
  # 男性数据点与折线
  geom_point(aes(y = Males), size = 2, alpha = 0.3, color = "blue") +
  geom_line(aes(y = Males), size = 0.5, color = "blue") +
  geom_label_repel(data = rbind(max_male, min_male), aes(y = Males, label = round(Males, 2)), 
                   size = 4, color = "blue", nudge_y = 1) +
  # 图表标签
  labs(title = "2013-2023年男女平均小时工资率(仅1/6/12月数据)",
       x = "年份",
       y = "平均小时工资率(2024年加元)",
       color = "性别") +
  # X轴设置:仅显示年份,每年一个刻度
  scale_x_date(breaks = seq.Date(from = min(filtered_data$Date), to = max(filtered_data$Date), by = "year"),
               labels = function(x) year(x)) +
  theme_minimal() +
  theme(axis.text.x = element_text(size = 9))

关键修改说明

  • 数据过滤:使用lubridate包的month()函数提取日期中的月份,筛选出1、6、12月的数据,确保只使用目标月份绘图;
  • X轴优化:保留Date的日期类型(避免转成因子导致的刻度混乱),通过scale_x_date()设置刻度为每年年初,标签仅显示年份,同时所有筛选后的月份数据点都会保留在对应位置;
  • 修正原代码问题:修复了原代码中变量名笔误(如Dates的错误定义),并将极值标签的数值保留两位小数,提升可读性;
  • 简化代码结构:移除了不必要的单独变量赋值(如wages_males等),让代码更简洁。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 15:23:12