Создание нескольких ggplot одновременно

Вопрос или проблема

У меня есть такие данные в R:

library(ggplot2)
library(dplyr)

set.seed(123)

data <- data.frame(
    height = rnorm(1000, mean = 170, sd = 10),
    weight = rnorm(1000, mean = 70, sd = 15),
    country = sample(c("США", "Канада", "Великобритания", "Австралия"), 1000, replace = TRUE)
)

Я использую этот код, чтобы сделать фасет высоты против веса для каждой страны:

library(ggplot2)
library(gridExtra)

# Создаем отдельные графики для каждой страны
p1 <- ggplot(data %>% filter(country == "США"), aes(x = height, y = weight)) +
    geom_point(alpha = 0.5) +
    labs(title = "США", x = "Рост (см)", y = "Вес (кг)") +
    theme_minimal()

p2 <- ggplot(data %>% filter(country == "Канада"), aes(x = height, y = weight)) +
    geom_point(alpha = 0.5) +
    labs(title = "Канада", x = "Рост (см)", y = "Вес (кг)") +
    theme_minimal()

p3 <- ggplot(data %>% filter(country == "Великобритания"), aes(x = height, y = weight)) +
    geom_point(alpha = 0.5) +
    labs(title = "Великобритания", x = "Рост (см)", y = "Вес (кг)") +
    theme_minimal()

p4 <- ggplot(data %>% filter(country == "Австралия"), aes(x = height, y = weight)) +
    geom_point(alpha = 0.5) +
    labs(title = "Австралия", x = "Рост (см)", y = "Вес (кг)") +
    theme_minimal()



grid.arrange(p1, p2, p3, p4, ncol = 2)

введите описание изображения здесь

Есть ли что-то в R, что позволяет автоматически создавать каждый график с правильными названиями и объединять их на одной странице, вместо того чтобы делать это вручную?

Сейчас я делаю это вручную, и это занимает много времени (например, у меня 20 таких графиков) — разве это невозможно сделать автоматически?

Если вы не хотите фасетов, то лучший вариант — написать свою функцию для построения графиков и применить ее к данным. Например, вот так:

my_fun <- function(data, title) {
  ggplot(data, aes(x = height, y = weight)) +
    geom_point(alpha = 0.5) +
    labs(title = title, x = "Рост (см)", y = "Вес (кг)") +
    theme_minimal()
}
spl <- split(data, data$country)
my_plots <- purrr::map2(spl, names(spl), my_fun)
patchwork::wrap_plots(my_plots)

введите описание изображения здесь

Ответ или решение

Для создания нескольких графиков в R, связанных с разными странами, вы можете использовать ggplot2 совместно с purrr и patchwork, что позволит автоматизировать процесс генерации и отображения графиков. Ниже приведен пошаговый код, который поможет вам создать графики для каждой страны автоматически и расположить их на одной странице.

# Загружаем необходимые библиотеки
library(ggplot2)
library(dplyr)
library(purrr)
library(patchwork)

# Генерируем пример данных
set.seed(123)
data <- data.frame(
    height = rnorm(1000, mean = 170, sd = 10),
    weight = rnorm(1000, mean = 70, sd = 15),
    country = sample(c("USA", "Canada", "UK", "Australia"), 1000, replace = TRUE)
)

# Определяем функцию для создания графика
my_fun <- function(data, title) {
  ggplot(data, aes(x = height, y = weight)) +
    geom_point(alpha = 0.5) +
    labs(title = title, x = "Рост (см)", y = "Вес (кг)") +
    theme_minimal()
}

# Разделяем данные по странам
spl <- split(data, data$country)

# Создаем список графиков
my_plots <- map2(spl, names(spl), my_fun)

# Объединяем графики в один объект
final_plot <- wrap_plots(my_plots)

# Выводим финальный график
print(final_plot)

Объяснение кода:

  1. Импорт библиотек: Мы импортируем библиотеки ggplot2 для создания графиков, dplyr для обработки данных, purrr для функционального программирования и patchwork для объединения графиков.

  2. Генерация данных: Мы создаем примерный набор данных с высотой, весом и страной.

  3. Определение функции my_fun: Создаем функцию, которая принимает подмножество данных и название страны. Эта функция генерирует график разброса с заданными параметрами.

  4. Разделение данных на подмножества: Мы используем функцию split, чтобы разбить данные на группы по странам.

  5. Создание графиков: С помощью функции map2 мы применяем my_fun к каждому подмножеству и его названию, создавая список графиков.

  6. Объединение графиков: С помощью функции wrap_plots мы объединяем все графики в один объект.

  7. Вывод графиков: Мы выводим объединенный график на экран.

Таким образом, вы можете автоматически создавать множество графиков без необходимости вручную настраивать каждый из них. Это существенно упростит ваш рабочий процесс, особенно если у вас есть много стран или категорий.

Оцените материал
Добавить комментарий

Капча загружается...