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