按 R 中的特定组重新排序热图

Reorder heatmap by specific group in R

使用可用的航空公司安全数据集 here,我正在尝试在 R 中创建热图。我想订购热图,以便列出致命事故数量最多的航空公司在顶部。

我可以按“值”对热图进行排序 -

但这会按值对热图进行排序,而不管组是什么,即事件、致命事故或死亡人数。


# load packages -----------
library(tidyverse)
library(ggplot2)
library(reshape2)
library(dplyr)
library(plyr)
library(scales)
library(forcats)

# read in the data
airlines <- read.csv("/Volumes/GoogleDrive/My Drive/Uni/DVN/AT2/Blog 2/airline_incidents.csv", header = TRUE) 

# select relevant columns 
airlines_00_14 <- airlines[,c(1,6,7,8)]

# create a long dataset
airlines_00_14.m <- melt(airlines_00_14) 

# rescale values for heat map 
airlines_00_14.m <- ddply(airlines_00_14.m, .(variable), transform, rescale = rescale(value))

# create heat map 
(q <- airlines_00_14.m %>%
    ggplot( aes(x = variable, y = reorder(airline, value))) + 
    geom_tile(aes(fill = rescale), colour = "white") + 
    scale_fill_gradient(low = "white", high = "steelblue")) 

一种方法是在融化之前创建订单,如下所示:

# order by fatalities and generate air_order value
airlines_00_14 = airlines_00_14[order(airlines_00_14$fatal_accidents_00_14),]
airlines_00_14$air_order = seq_len(nrow(airlines_00_14))

然后,当您使用 reshape2::melt 时,设置 `id.vars = c("airline","air_order")

# create a long dataset
airlines_00_14.m <- reshape2::melt(airlines_00_14,id.vars = c("airline", "air_order"))

然后,在您的情节中,使用 y=reorder(airline, air_order) 而不是当前的 y=reorder(airline, value)

输出: