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

R语言按指定分组重排热图:按致命事故数排序航空安全热图

问题原因

你当前代码排序不符合预期的核心原因是reorder(airline, value)的默认逻辑,会对每个航空公司名下所有3类指标(事故总数、致命事故数、死亡人数)的value取均值,按跨指标的综合均值排序,没有单独提取致命事故的数值作为排序依据。
另外代码同时加载plyr和dplyr会出现同名函数覆盖问题,容易触发无意义报错,建议移除plyr加载,用dplyr原生函数做数据处理。

解决方法

只需要修改Y轴的因子排序逻辑:仅保留「致命事故数」对应的数值作为排序权重,其余指标的数值在排序时设为NA忽略,即可实现按致命事故数单独排序、数值最高的航司显示在Y轴最顶部的需求。
修改后的完整可运行代码如下:

# 加载包 -----------
# 已移除plyr加载,避免和dplyr函数冲突
library(tidyverse)
library(ggplot2)
library(reshape2)
library(scales)
library(forcats)

# 读取数据
airlines <- read.csv("/Volumes/GoogleDrive/My Drive/Uni/DVN/AT2/Blog 2/airline_incidents.csv", header = TRUE) 

# 选取需要的列
airlines_00_14 <- airlines[,c(1,6,7,8)]

# 转换为长表
airlines_00_14.m <- melt(airlines_00_14) 

# 按指标分组归一化数值用于热图映射
airlines_00_14.m <- airlines_00_14.m %>%
  group_by(variable) %>%
  mutate(rescale = rescale(value)) %>%
  ungroup()

# 绘制热图
(q <- airlines_00_14.m %>%
    ggplot(aes(x = variable, 
               # 核心修改:仅用致命事故列的数值作为排序依据
               # 若你数据里致命事故对应的variable名称不一致,替换引号内的内容即可
               y = reorder(airline, ifelse(variable == "fatal_accidents_00_14", value, NA), na.rm = TRUE))) + 
    geom_tile(aes(fill = rescale), colour = "white") + 
    scale_fill_gradient(low = "white", high = "steelblue") +
    # 可选:修改坐标轴标签为更易读的中文
    scale_x_discrete(labels = c("incidents_00_14" = "事故总数",
                                "fatal_accidents_00_14" = "致命事故数",
                                "fatalities_00_14" = "死亡人数")) +
    labs(x = "统计指标", y = "航空公司", fill = "归一化数值")
)
注意事项
  • 如果运行后发现致命事故数最高的航司出现在Y轴最底部,只需要把排序代码里的value改为-value即可反转排序顺序。
  • 如果一定要用plyr,请确保plyr的加载顺序在dplyr之前,避免函数冲突。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.04 16:15:42