繁体   English   中英

`facet_wrap` 与 `facet_col`:试图强制 geom_tile 在分面面板之间具有相同大小的图块并为每个分面保留 x 轴标签

[英]`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

我正在使用 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))

带有 facet_wrap 的日历

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

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

带有 facet_col 的日历

使用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 包(v1.0.0) 于 2021 年 6 月 16 日创建

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM