ggplot轴顺序条件不在数据框中

我有绘制此热图的数据框:

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具有多个订单值。如何汇总数据框以进行订购而不会弄乱绘图的数据框?还是有更简单的方法让我看不到?

wuxiaoxun 回答:ggplot轴顺序条件不在数据框中

library(ggplot2)
library(dplyr)
library(tidyr)

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)) %>% 
        group_by(id) %>% 
        mutate(order = sum(!flag)) %>% 
      ggplot(aes(year,reorder(id,order),fill = flag)) + 
        geom_tile()

本文链接:https://www.f2er.com/3108183.html

大家都在问