【问题标题】:`facet_wrap` vs `facet_col`: trying to force geom_tile to have equal sized tiles among facet panels and retain x-axis labels for each facet`facet_wrap` vs `facet_col`:试图强制 geom_tile 在 facet 面板之间具有相同大小的图块,并为每个 facet 保留 x 轴标签
【发布时间】:2021-09-01 07:39:07
【问题描述】:

我正在使用 ggplot2 制作日历。我希望日历看起来像这样:

library(tidyverse)
library(lubridate)
library(ggforce)

datedb <- tibble(date = seq(as.Date("2021-09-01"), 
                                as.Date("2021-12-31"), by = 1),
                    day = day(date),
                     week_no = epiweek(date),
                     Month = month(date, label = TRUE, abbr = FALSE),
                     Wday = wday(date, label = TRUE, abbr = TRUE))

ggplot(datedb, aes(Wday, week_no)) +
  geom_tile(color = "black", fill = NA) +
  geom_text(aes(label = day), size = 3) +
  scale_y_reverse() +
  scale_x_discrete(position = "top") +
  facet_wrap(~ Month, ncol = 1, scales = "free",
             strip.position = "top") +
  theme_void() +
  theme(axis.text.x = element_text(size = 9),
        strip.placement = "outside",
        strip.text = element_text(size = 13))

但是,我注意到 10 月份的图块比其他月份要小 - 10 月份的天数比其他月份多一排。我想让所有单元格的大小相同。我可以在ggforce 中使用facet_col 参数而不是facet_wrap 来执行此操作:ggforce::facet_col(vars(Month), scales = "free_y", space = "free") + ...但后来我松开了我的 x 轴标签(见下图),这很重要 - 我希望每个月都显示一周中的几天。

是否有任何“简单”的解决方案可以让我的网格单元保持相同的大小我的 x 轴标签?

【问题讨论】:

    标签: r ggplot2 ggforce


    【解决方案1】:

    使用facet_col() 方法;把scales = "free_y"改成scales = "free"不解决问题吗?

    library(tidyverse)
    library(lubridate)
    #> 
    #> Attaching package: 'lubridate'
    #> The following objects are masked from 'package:base':
    #> 
    #>     date, intersect, setdiff, union
    library(ggforce)
    
    datedb <- tibble(date = seq(as.Date("2021-09-01"), 
                                as.Date("2021-12-31"), by = 1),
                     day = day(date),
                     week_no = epiweek(date),
                     Month = month(date, label = TRUE, abbr = FALSE),
                     Wday = wday(date, label = TRUE, abbr = TRUE))
    
    ggplot(datedb, aes(Wday, week_no)) +
      geom_tile(color = "black", fill = NA) +
      geom_text(aes(label = day), size = 3) +
      scale_y_reverse() +
      scale_x_discrete(position = "top") +
      facet_col(~ Month, scales = "free", space = "free",
                 strip.position = "top") +
      theme_void() +
      theme(axis.text.x = element_text(size = 9),
            strip.placement = "outside",
            strip.text = element_text(size = 13))
    

    reprex package (v1.0.0) 于 2021-06-16 创建

    【讨论】:

    • 叹息。是的。我发誓我试过这个!谢谢 - 感觉有点不好意思,但我会把它留在这里,以防其他人发现它有用......
    猜你喜欢
    • 2017-05-24
    • 2021-03-09
    • 2016-06-14
    • 1970-01-01
    • 2018-10-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多