Как изменить размер ggplot внутри функции без сохранения графика

#r #ggplot2

#r #ggplot2

Вопрос:

Я пытаюсь изменить размер графика, созданного в рамках функции, но это не работает.

 library(ggplot2)
library(ggrepel)
library(magrittr)

plot_exons  <- function(exons_df, exon_start, exon_end) {
  d = data.frame(
    x1 = exon_start,
    x2 = exon_end,
    y1 = c(1.5, 1.5),
    y2 = c(2, 2),
    t = paste0('Exon ' , seq(1, nrow(exons_df))),
    label = paste0('Exon ' , seq(1, nrow(exons_df)))
  )
  
  d %>%
    ggplot2::ggplot()  
    scale_x_continuous(name = "(kbp)", scales::pretty_breaks(n = 8))  
    scale_y_continuous(name = "")  
    geom_hline(yintercept = 1.6,
               size = 20,
               alpha = 0.1)  
    geom_rect(
      data = d,
      mapping = aes(
        xmin = x1,
        xmax = x2,
        ymin = 1.5,
        ymax = 1.8,
        label = label
      ),
      color = "black",
      fill = "#56B4E9"
    )  
    ggrepel::geom_text_repel(
      data = d,
      aes(
        x = x1   (x2 - x1) / 2,
        y = 1.8,
        label = label,
      ),
      size = 10,
      force_pull   = 0,
      # do not pull toward data points
      nudge_y      = 0.05,
      direction    = "x",
      angle        = 90,
      vjust        = 0,
      segment.size = 0.2,
    )  
    ylim(1.5, 2.2)  
    xlab("(kbp)")  
    ylab("")  
    theme_bw()  
    theme(
      legend.position = "none",
      panel.grid.major.y = element_blank(),
      panel.grid.minor.y = element_blank(),
      panel.grid.major.x = element_blank(),
      panel.grid.minor.x = element_blank(),
      axis.text.y = element_blank(),
      axis.text.x = element_text(size = 30),
      axis.ticks.length =  unit(10, "pt"),
      text = element_text(size = 30),
      panel.border = element_blank()
    )
  
}

start = c(1, 5, 8, 14, 19, 25)
end = c(3, 6, 12, 16, 22, 30)
label = c(1, 2, 3, 4, 5, 6)

regions = tibble::tibble(label, start, end)

plot_exons(regions, regions$start, regions$end)
#> Warning: Ignoring unknown aesthetics: label
#> Warning: Ignoring unknown parameters: force_pull
#> Scale for 'y' is already present. Adding another scale for 'y', which will
#> replace the existing scale.
 

Создано 2020-12-21 пакетом reprex (версия 0.3.0)

но я хочу изменить размер графика (высота = 15 см, ширина = 70 см) внутри функции. Итак, я попробовал

 ggdraw() 
       draw_plot(p,x=0,y=0,width=70,height = 15)
 

а также добавление перед графиком

 options(repr.plot.width = 70, repr.plot.height = 10)
 

но ничего не работало , кроме использования ggsave('fig.jpg', width = 70, height = 18, units = "cm" ) .

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

Как я могу создать тот же график (изменить размер графика внутри функции без сохранения графика), пожалуйста?

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

1. Вы имеете ggplot в виду автоматическое изменение размера вашего окна построения графика?? cm не имеет смысла как единица измерения, если вы не сохраняете график. Я полагаю cowplot::draw_plot , что он предназначен для второстепенных сюжетов, т. е. Если вы хотите, чтобы сюжет занимал меньше места, чем полное графическое устройство. Если вы хотите создать графическое устройство определенного размера, я думаю, вам нужно обратить внимание на такие вещи, как ?x11

2. Спасибо @GregorThomas. Я пробовал и dev.new(width = 80, height = 15) то, и x11(width = 80, height = 15) другое, но ничего из этого не сработало.