在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
相关产品推荐
相关产品推荐

