如何在一张图片中将一张条形图分成两张?

How to one barplot into two within one picture?

这是我的代码:

p14 <- ggplot(plot14, aes(x = Harvest, y = Percentage, fill = factor(Plant, level = orderplants)))+
  geom_col(show.legend = FALSE)+
  geom_vline(xintercept=3.5)+
  labs(y = "Bedekking %",
    x = NULL,
    fill = "Plantensoort")+
  theme_classic()

plot 14

代码是关于一个地块的植物覆盖率(我总共有 70 个地块)。所以 bedekking 是荷兰语的覆盖范围。问题:数字代表测量的时间段:

  1. 2020 年 7 月
  2. 2020 年 8 月
  3. 2020 年 10 月
  4. 2021 年 5 月
  5. 2021 年 6 月
  6. 2021 年 7 月
  7. 2021 年 8 月
  8. 2021 年 10 月

我希望每个月的条形图都排成一行,因此会有两行(2020 年和 2021 年),其中相同月份的条形图彼此 above/below(见下面的丑陋草图)。这是否可以编码,或者我是否需要更改我的整个数据集?

very quick example of goal

如果您可以将一些样本原始数据作为可重现示例的一部分,那就更好了。我创建了一些虚构的数据来说明。

理想情况下,您希望原始日期落后于编号的时间测量值,以便您可以将日期拆分为月和年作为单独的变量。假设你只有数字,你可以创建一些这样的逻辑来计算月份和年份。

您可以使用 facet_wrap 显示相应月份的一年以上。

library(tidyverse)
library(scales)

tibble(
  harvest = seq(1, 8, 1),
  percentage = rep(1, 8),
  plant = rep(c("this", "that"), 4)
) |>
  mutate(
    month = case_when(
      harvest %in% c(1, 6) ~ 7,
      harvest %in% c(2, 7) ~ 8,
      harvest %in% c(3, 8) ~ 10,
      harvest %in% c(4) ~ 5,
      harvest %in% c(5) ~ 6,
      TRUE ~ NA_real_
    ),
    year = case_when(
      harvest <= 3 ~ 2020,
      TRUE ~ 2021
    )
  ) |>
  ggplot(aes(month, percentage, fill = plant)) +
  geom_col(show.legend = FALSE) +
  labs(
    y = "Bedekking %",
    x = NULL,
    fill = "Plantensoort"
  ) +
  facet_wrap(~year, ncol = 1) +
  scale_y_continuous(labels = label_percent()) +
  theme_classic()

reprex package (v2.0.1)

创建于 2022-05-13