根据 geom_tile() 热图中的两列值对行重新排序

Posted

技术标签:

【中文标题】根据 geom_tile() 热图中的两列值对行重新排序【英文标题】:Reorder rows according to two column values in geom_tile() heatmap 【发布时间】:2021-04-17 08:43:13 【问题描述】:
library(tidyverse)

df <- data.frame(country = c("USA", "USA", "USA", 
                             "UK", "UK", "UK", 
                             "Japan", "Japan", "Japan", 
                             "Germany", "Germany", "Germany",
                             "Sweden","Sweden","Sweden",
                             "Norway","Norway","Norway"),
                 year = c(2000, 2001, 2002, 
                          2000, 2001, 2002, 
                          2000, 2001, 2002, 
                          2000, 2001, 2002, 
                          2000, 2001, 2002, 
                          2000, 2001, 2002),
                 value = c(0,1,1,
                           1,1,1,
                           0,0,0,
                           0,0,1,
                           0,1,1,
                           0,1,0))

ggplot(df, aes(year, country, fill = factor(value)))+
  geom_tile(color = "white", size = 1)+
  theme_minimal() 

这是我得到的数据、代码和原始图。 有没有一种方法可以同时按 value 值和 year 对国家/地区行重新排序?

我的目标:国家行将按years 中的第一个value=1 排序。

问题:因为我也希望图例成为因素,而不是连续的。这会导致排序问题。

理想顺序:

第一排:英国 第二行:瑞典或美国(因为它们的值相同) 第三行:瑞典或美国(因为它们的值相同) 第四行:挪威 第 5 行:德国 第 6 行:日本

【问题讨论】:

【参考方案1】:

您可以使用 forcats 包中的 fct_relevel,如果这是您要查找的内容。

library(tidyverse)

library(forcats)
ro <- c('Japan', 'Germany', 'Norway', 'USA','Sweden', 'UK')

df %>%
  mutate(country= fct_relevel(country, ro)) %>% 
ggplot(aes(year, country, fill = factor(value))) +
  geom_tile(color = "white", size = 1)+
  theme_minimal()

【讨论】:

以上是关于根据 geom_tile() 热图中的两列值对行重新排序的主要内容,如果未能解决你的问题,请参考以下文章

带有geom_tile的热图如何在不使用构面的情况下根据另一个因素进行划分和重新排序

geom_tile 热图中的瓦片长度不正确

在使用原始查询时选择比较 ormlite 中的两列值的行

删除基于重复的两列值。

如何把数据库读出来的两列值放到map集合中的key和value,求代码!例如:

如何使用 Python 在一个时间段内对行进行分组