R语言基于HighCat与Decade列统计并绘制飓风分类折线图问题
问题修正方案
错误原因分析
- 列名大小写不匹配:原始数据列名为
Decade,但代码分组时误用DECADE,导致统计逻辑失效。 - 数据源错误:绘图时使用原始数据
tracks,而该数据中storm_cnt全为NA,无法生成有效图形,应使用统计后的tracks_decade。 - 折线图映射逻辑错误:原代码将数量
storm_cnt设为x轴、飓风类别HighCat设为y轴,且每个类别在单一年代仅一个数据点,折线图无法形成连续线条。
修正后的代码
第一步:正确统计各年代飓风类别数量
library(dplyr) library(tidyr) # 用于补全缺失组合(可选) library(ggplot2) # 按飓风类别+年代分组统计数量,同时取消分组 tracks_decade <- tracks %>% group_by(HighCat, Decade) %>% summarize(storm_cnt = n(), .groups = "drop")
方案1:用柱状图展示(更适合单类别数量展示)
如果你的需求是按年代拆分面板,展示每个年代下各飓风类别的数量,柱状图比折线图更直观:
ggplot(tracks_decade) + geom_col(aes(x = HighCat, y = storm_cnt, fill = HighCat)) + facet_wrap(vars(Decade), ncol = 1) + labs(x = "飓风类别", y = "数量", title = "各年代飓风类别数量统计")
方案2:用折线图展示(适合看类别数量随年代的变化)
如果需要用折线图展示每个飓风类别在不同年代的数量变化,需先补全缺失的类别-年代组合(避免折线断裂):
# 补全所有飓风类别在三个年代的记录,缺失的数量填0 tracks_decade_full <- tracks_decade %>% complete(HighCat, Decade, fill = list(storm_cnt = 0)) # 绘制折线图,每个类别一条线 ggplot(tracks_decade_full) + geom_line(aes(x = Decade, y = storm_cnt, color = HighCat, group = HighCat)) + geom_point(aes(x = Decade, y = storm_cnt, color = HighCat)) + # 增加数据点提升可读性 labs(x = "年代", y = "数量", title = "各飓风类别数量随年代变化")
内容的提问来源于stack exchange,提问作者Gary
相关产品推荐
相关产品推荐

