当我已经为我的列定义网格时,如何向 facet_grid() 添加更多行?

How to add more rows to facet_grid() when I am already defining grids for my column?

提问人:Joe the Second 提问时间:10/5/2023 更新时间:10/5/2023 访问量:19

问:

我有以下数据集:

set.seed(7736)
categories <- rep(LETTERS[1:11], each = 30)
values <- sample(50:200, 330, replace = T)
df <- data.frame(category = categories, values = values)

我正在创建以下图表:

graph_builder <- function(data_set, y_axis_parameter, category, attribute_name) {
  data_set <- data_set |>
    mutate(x = row_number(), .by = {{ category }})
  graph <- ggplot(data_set, aes(
    x = x,
    y = {{ y_axis_parameter }}, colour = {{ category }},
    group = 1
  )) +
    geom_line() +
    geom_point() +
    facet_grid(cols = vars({{ category }}), scales = "free_x") +
    ylab(paste0(attribute_name, " Measured Values")) +
    xlab("Data Points") +
    labs(title = paste0(attribute_name)) +
    theme(plot.title = element_text(hjust = 0.5)) +
    theme(legend.position = "none")

  graph
}

正如你所看到的,我的网格是类别。

enter image description here

我想做的不是将所有数据显示在一行中,而是希望有 2 或 3 行,这样图表的可读性更强。当我传递给 facet_grid() 时,我收到错误,行数必须为“NULL”。nrows= 2

问题:有没有一个参数可以传递给 facet_grid() 自动将我的数据拆分为更多行(比如 2 或 3)。如您所见,在上图中,我有 11 个组,因此如果我选择有两行,那么其中一行必须显示更多类别(第一行 6 个类别,第二行 5 个类别)。或者,如果我想在 3 行中显示数据,那么 11 不能被 3 整除,我不知道 facet_grid() 是否能够完成我正在寻找的操作。任何帮助将不胜感激。

r ggplot2 可视化 分面网格

评论


答:

2赞 Till 10/5/2023 #1

您可以使用代替 .它会自动 选择一个 合理比例 列到行。facet_wrap()facet_grid()

library(tidyverse)

graph_builder <- function(data_set, y_axis_parameter, category, attribute_name) {
  data_set <- data_set |>
    mutate(x = row_number(), .by = {{ category }})
  graph <- ggplot(data_set, aes(
    x = x,
    y = {{ y_axis_parameter }}, colour = {{ category }},
    group = 1
  )) +
    geom_line() +
    geom_point() +
    facet_wrap(vars({{category}}), scales = "free_x") +
    ylab(paste0(attribute_name, " Measured Values")) +
    xlab("Data Points") +
    labs(title = paste0(attribute_name)) +
    theme(plot.title = element_text(hjust = 0.5)) +
    theme(legend.position = "none")
  
  graph
}

df |> 
  graph_builder(values, category, "blargh")


df |> 
  filter(category %in% LETTERS[1:5]) |> 
  graph_builder(values, category, "blargh")