Последовательная нумерация участков

#r #ggplot2 #r-markdown

#r #ggplot2 #r-уценка

Вопрос:

В R Markdown я создаю отчет, содержащий несколько графиков. Мне нужно добавить «Рис. ##» к заголовку каждого участка, чтобы эти номера были последовательными. На данный момент мой подход заключается в использовании переменной fig и добавлении к ней 1 после каждого графика.

 library(ggplot2);

fig = 1;

ggplot(mtcars) 
  geom_point(aes(x = cyl,
                 y = disp)) 
  labs(title = paste0("Fig. ", fig, ". Cyl vs Disp"));
fig = fig   1;

## Some extra code or chunk break

ggplot(iris) 
  geom_point(aes(x = Sepal.Length,
                 y = Petal.Length)) 
  labs(title = paste0("Fig. ", fig, ". Sepal vs Petal"));
fig = fig   1;

 

Моя проблема в том, что я часто забываю добавлять fig = fig 1; после графика. Есть ли какой-нибудь элегантный способ избежать этого повторяющегося ввода?

ОБНОВЛЕНИЕ: reprex был обновлен, чтобы более четко показать проблему.

Ответ №1:

попробуйте сделать это таким образом

 library(tidyverse)
fn_plot <- function(data, x, y, fig){
  ggplot(data) 
    geom_point(aes(x = .data[[x]],
                   y = .data[[y]]))  
    labs(title = paste0("Fig. ", fig, " . ", x, " vs ", y))
}

data <- list(mtcars, iris)
x <- c("cyl", "Sepal.Length")
y <- c("disp", "Petal.Length")
fig <- 1:2

l <- list(data, x, y, fig)

pmap(.l = l, .f = fn_plot)
#> [[1]]
 

 #> 
#> [[2]]
 

Создано 2021-03-02 пакетом reprex (версия v1.0.0)

Комментарии:

1. Извините, мой reprex был не очень ясен в том, что я хочу. Я обновил reprex, чтобы лучше показать проблему — я не могу программно генерировать графики, поскольку они сильно отличаются друг от друга.