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

问题描述

library(tidyverse)

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

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

Raw Plot

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

我的目标:国家/地区行将按 value 秒内的第一个 year=1 进行排序。

问题:因为我也希望图例是因子,而不是连续的。这会造成订购问题。

理想顺序:

  • 第一行:英国
  • 第二行:瑞典或美国(因为它们具有相同的值)
  • 第三行:瑞典或美国(因为它们具有相同的值)
  • 第四行:挪威
  • 第五行:德国
  • 第六行:日本

解决方法

您可以使用 fct_relevel 包中的 forcats,如果这是您正在寻找的。​​p>

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()