如何限制 facet_wrap() 中的因子数量以仅绘制前 N 个因子?

时间:2021-04-28 17:38:10

标签: r ggplot2 facet-wrap

我正在地区级别处理 Covid 数据,并尝试使用 timeseries地区 绘制案例 facet_wrap()

有些州有很多地区,而所有地区都不适合,所以我想限制facet_wrap前 N 个地区。 >

我曾尝试通过facet_wrap()fct_reorder(Districts)进行重新排序,但这只会对所有地区重新排序并生成地块。

有没有办法获得那些fct_reorder(Districts)前N个级别并仅绘制那些前N个,或者是否有任何选项可以控制< facet_wrap 中的强>面数 ?

df:

library(tidyverse)
library(lubridate)

file_url <- "https://raw.githubusercontent.com/johnsnow09/covid19-df_stack-code/main/df_districts.csv"

df_districts <- read.csv(url(file_url))

df_districts <- df_districts %>% 
mutate(Date = ymd(Date))

我试过了:

df_districts %>% 
  filter(State == "Rajasthan",
         Date != max(Date),
         !is.na(Daily_confirmed)) %>% 

  # group_by(District, Date) %>% 
  # slice_max(order_by = Daily_confirmed, n = 20) %>% 
  
  mutate(District = fct_reorder(District, Daily_confirmed, 
                                .fun = max, .desc = TRUE)) %>% 

  ggplot(aes(x = Date, y = Daily_confirmed)) +
  geom_line(size = 1) +
  facet_wrap(~District)

1 个答案:

答案 0 :(得分:0)

一种方法是按您需要的任何优先级(例如,sum(Daily_confirmed))汇总表格,然后按该排序变量取前“n”。

df_districts %>%
  group_by(District) %>%
  summarize(daily = sum(Daily_confirmed)) %>%
  slice_max(daily, n = 10)
# # A tibble: 10 x 2
#    District daily
#    <chr>    <int>
#  1 Jaipur   99843
#  2 Jodhpur  72443
#  3 Kota     39442
#  4 Alwar    34650
#  5 Udaipur  31297
#  6 Bikaner  26144
#  7 Ajmer    25866
#  8 Bhilwara 19922
#  9 Pali     16589
# 10 Sikar    15031

使用这些数据,我们可以在 left_joinDistrict 返回原始数据(如果需要,首先删除 daily),并且您的子集将只有这些区。

out <- df_districts %>%
  group_by(District) %>%
  summarize(daily = sum(Daily_confirmed)) %>%
  slice_max(daily, n = 10) %>%
  select(-daily) %>%
  left_join(df_districts, by = "District")
out
# # A tibble: 3,660 x 11
#    District Date       State     Confirmed Recovered Deceased Other Tested Daily_confirmed Daily_Recovered Daily_Deceased
#    <chr>    <date>     <chr>         <int>     <int>    <int> <int>  <int>           <int>           <int>          <int>
#  1 Jaipur   2021-04-27 Rajasthan    100651     68325      659     0 968783            3289             989             21
#  2 Jaipur   2021-04-26 Rajasthan     97362     67336      638     0 968783            2878             961             11
#  3 Jaipur   2021-04-25 Rajasthan     94484     66375      627     0 968783            3145             648             13
#  4 Jaipur   2021-04-24 Rajasthan     91339     65727      614     0 968783            3260             657              9
#  5 Jaipur   2021-04-23 Rajasthan     88079     65070      605     0 968783            3036             767             13
#  6 Jaipur   2021-04-22 Rajasthan     85043     64303      592     0 968783            2317             658             11
#  7 Jaipur   2021-04-21 Rajasthan     82726     63645      581     0 968783            3101             551              5
#  8 Jaipur   2021-04-20 Rajasthan     79625     63094      576     0 968783            1875             413              9
#  9 Jaipur   2021-04-19 Rajasthan     77750     62681      567     0 968783            2011             528             11
# 10 Jaipur   2021-04-18 Rajasthan     75739     62153      556     0 968783            1963             258              4
# # ... with 3,650 more rows

为了比较,

table(df_districts$District)
#          Ajmer          Alwar       Banswara          Baran         Barmer      Bharatpur       Bhilwara        Bikaner 
#            366            366            366            362            366            366            366            366 
#       BSF Camp          Bundi    Chittorgarh          Churu          Dausa        Dholpur      Dungarpur       Evacuees 
#            356            335            366            366            366            366            366            366 
#     Ganganagar    Hanumangarh       Italians         Jaipur      Jaisalmer         Jalore       Jhalawar      Jhunjhunu 
#            342            366            366            366            366            356            366            366 
#        Jodhpur        Karauli           Kota         Nagaur    Other State           Pali     Pratapgarh      Rajsamand 
#            366            366            366            366            366            366            366            366 
# Sawai Madhopur          Sikar         Sirohi           Tonk        Udaipur 
#            366            366            355            366            366 

table(out$District)
#    Ajmer    Alwar Bhilwara  Bikaner   Jaipur  Jodhpur     Kota     Pali    Sikar  Udaipur 
#      366      366      366      366      366      366      366      366      366      366 
相关问题