Есть ли способ условного масштабирования вывода ggplot на основе размеров элементов графика?

#ggplot2

Вопрос:

Есть ли способ масштабировать вывод ggplot/ggsave условно в зависимости от содержимого графика? Я создаю много графиков в цикле for и хотел бы обрабатывать это автоматически. Ниже у меня есть фрагмент кода из более раннего поста в качестве примера. Если, например, существует много терминов GO (вертикальная ось), я хотел бы расширить график по вертикали. если описания очень длинные, я не хочу, чтобы сюжет был сжат вместе, но увеличил ширину. Я подумываю о том, чтобы придумать формулу для использования в качестве входных данных для параметров высоты и ширины в функции ggsave, но существует ли функция для этого, о которой я не знаю?

 term lt;-c("snoRNA binding", "preprophase band", "kinesin complex", "microtubule motor activity", "DNA replication") fc lt;-runif(5, 1.00, 5.00) padj_BH lt;-runif(5, 0.001, 0.05) numDEInCat lt;-runif(5, 30, 300)  ggdata lt;- data.frame(term,fc,padj_BH, numDEInCat)   gg1 lt;- ggplot(ggdata,  aes(x = term, y = fc, size = numDEInCat, color = padj_BH))     expand_limits(y = 1)    geom_point(shape = 16,inherit.aes = T)    scale_size(range = c(2.5,12.5))    scale_color_gradient(low= "#ff0303",  high="#1e00b3")  #colour for p value     xlab('')   ylab('Fold Enrichment')   #lavel fold enrichment axis  labs(  title = "Gene Ontology all",  subtitle = 'BH-adjusted',  caption = '',   color="Adjusted P-value", #label the aacolor  size="count")   #label dot size     theme_bw(base_size = 24)    theme(  legend.position = 'right',  legend.background = element_rect(),  plot.title = element_text(angle = 0, size = 16, face = 'bold', vjust = 1),  plot.subtitle = element_text(angle = 0, size = 14, face = 'bold', vjust = 1),  plot.caption = element_text(angle = 0, size = 12, face = 'bold', vjust = 1),   axis.text.x = element_text(angle = 0, size = 12, face = 'bold', hjust = 1.10),  axis.text.y = element_text(angle = 0, size = 12, face = 'bold', vjust = 0.5),  axis.title = element_text(size = 12, face = 'bold'),  axis.title.x = element_text(size = 12, face = 'bold'),  axis.title.y = element_text(size = 12, face = 'bold'),  axis.line = element_line(colour = 'black'),   #Legend  legend.key = element_blank(), # removes the border  legend.key.size = unit(1, "cm"), # Sets overall area/size of the legend  legend.text = element_text(size = 14, face = "bold"), # Text size  title = element_text(size = 14, face = "bold"))     coord_flip()   ggsave(filename="file.png", plot=gg1, width=14, height=7) gg1   

план обогащения

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

1. честно говоря, это довольно необычный подход. — обычно у вас есть размеры участка, определенные местом вашей публикации (журнал, веб-сайт и т. Д. ), И вы соответствующим образом корректируете размеры элементов вашего участка. Что касается вопроса, то на самом деле это может быть очень сложно, потому что размер элементов определяется во время рисования (а некоторые также зависят даже от размера вашего устройства!!!)