按 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)
输出:
使用可用的航空公司安全数据集 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)
输出: