我有绘制此热图的数据框:
library(tidyverse)
set.seed(1)
data.frame(id = factor(sample(1:100,10000,replace=TRUE,prob = sample(1:9/10,100,replace=TRUE)),levels = 1:100),year = factor(sample(1950:2019,prob=sample(1:9/10,70,levels=1950:2019)) %>%
unique() %>% arrange(id,year) %>%
mutate(flag = TRUE) %>%
complete(id,year,fill = list(flag = FALSE)) %>%
ggplot(aes(year,id,fill = flag)) +
geom_tile()
我需要将ID从最大FALSE计数到最小排序。到目前为止,我已经尝试过:
在complete()
函数之后,我添加了:
group_by(id,flag) %>%
mutate(order = ifelse(flag==FALSE,n(),NA)) %>%
以及ggplot()
行代码中
ggplot(aes(year,reorder(id,order),fill = flag)) +
但是,它仍然无法正常工作。我认为这是因为每个ID具有多个订单值。如何汇总数据框以进行订购而不会弄乱绘图的数据框?还是有更简单的方法让我看不到?