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

在ggplot2中按月份绘制Smuggling为Yes的分类变量频率图

我来帮你把这个ggplot2的绘图代码完善好,一步步来拆解:

问题背景

你已经筛选出SMUGGLING为"Yes"的数据集smugglingyes,目标是绘制2016-2017年各月份的走私记录频率分布图,X轴为月份,Y轴对应走私记录的频率。

完整解决方案步骤

1. 先处理月份数据(关键前提)

首先得确保Month字段是日期格式,不然ggplot没法按时间顺序正确排列月份。如果你的Month还是字符类型,先做格式转换:

# 转换为标准日期格式
smugglingyes$Month <- as.Date(smugglingyes$Month)
# 可选:提取年份-月份的文本格式,方便后续分组或标注
smugglingyes$year_month <- format(smugglingyes$Month, "%Y-%m")

2. 完善ggplot绘图代码

方案一:柱状图(直观展示每月记录数量)

这是最适合展示频率分布的基础图表:

library(ggplot2)

ggplot(data = smugglingyes, aes(x = Month)) +
  # 自动统计每月的记录数(即频率)
  geom_bar(fill = "#2c3e50", alpha = 0.8) +
  # 设置X轴按月份间隔显示,避免标签重叠
  scale_x_date(date_breaks = "1 month", date_labels = "%Y-%m") +
  # 添加清晰的坐标轴标签和标题
  labs(
    x = "月份",
    y = "走私记录频率(次数)",
    title = "2016-2017年各月份走私记录分布",
    subtitle = "仅统计SMUGGLING为Yes的记录"
  ) +
  # 旋转X轴标签,解决拥挤问题
  theme(axis.text.x = element_text(angle = 45, hjust = 1))

方案二:折线图(观察频率变化趋势)

如果想重点看频率随时间的变化趋势,用折线图更合适:

ggplot(data = smugglingyes, aes(x = Month)) +
  # 统计每月数量并绘制折线
  stat_count(geom = "line", group = 1, color = "#e74c3c", linewidth = 1.2) +
  # 搭配点标记,让数据点更清晰
  stat_count(geom = "point", color = "#e74c3c", size = 3) +
  scale_x_date(date_breaks = "1 month", date_labels = "%Y-%m") +
  labs(
    x = "月份",
    y = "走私记录频率(次数)",
    title = "2016-2017年走私记录频率趋势",
    subtitle = "仅统计SMUGGLING为Yes的记录"
  ) +
  theme(axis.text.x = element_text(angle = 45, hjust = 1))

3. 可选:处理缺失值

你的数据里存在<NA>值,如果想忽略这些缺失值绘图,可以在ggplot中直接过滤:

ggplot(data = smugglingyes[!is.na(smugglingyes$VIOLENCE) & !is.na(smugglingyes$AUXILIARY), ], aes(x = Month)) +
  geom_bar(fill = "#2c3e50", alpha = 0.8) +
  scale_x_date(date_breaks = "1 month", date_labels = "%Y-%m") +
  labs(x = "月份", y = "走私记录频率", title = "过滤缺失值后的走私记录分布") +
  theme(axis.text.x = element_text(angle = 45, hjust = 1))

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 04:29:59