2017-08-26 4 views
2

J'ai le cas d'utilisation simplifié suivant. Au fond, j'ai quelques parcelles ggplot2 que je voudrais combiner avec une autre qui est généré en utilisant la bibliothèque graphique de base plot.new() etc:Comment obtenir le graphique de base plot.new à combiner avec d'autres via arrangeGrob?

p1 <- generate_ggplot1(...) 
p2 <- generate_ggplot2(...) 
p3 <- generate_ggplot3(...) 

# how to get hold of the plot output and make it available as 
# p4 for arrangeGrob? 
plot.new() 
... 

final <- gridExtra::arrangeGrob(p1, p2, p3, p4, layout_matrix = rbind(c(1,2), c(3,4)), widths=c(7,7), heights=c(7,7)) 
ggplot2::ggsave(filename=output.file,plot=final,width=14,height=14) 

Quelles sont les options pour le faire? séparée de réécriture p4 pour être natif ggplot2

+0

Je ne sais pas s'il est possible avec 'gridextra', mais vérifiez' gridbase'; [Combiner les graphiques de base et de ggplot dans la fenêtre de chiffre R] (https://stackoverflow.com/questions/14124373/combine-base-and-ggplot-graphics-in-r-figure-window/14125565#14125565), [tracés générés par 'plot' et 'ggplot' côte-à-côte] (https://stackoverflow.com/questions/13021863/plots-generated-by-plot-and-ggplot-side-by-side) – Henrik

Répondre

5

essayer this,

library(gridGraphics) 
library(grid) 
library(gridExtra) 
library(ggplot2) 

grab_grob <- function(...){ 
    grid.echo(...) 
    grid.grab() 
} 

b <- grab_grob(function() plot(cars)) 
g <- ggplot() 

grid.arrange(b, g) 
+0

Un grand merci pour votre répondre! Je comprends 'gridExtra :: arrangeGrob', n'est-il pas possible d'utiliser encore cette API plutôt que' grid' directement? Sinon, et pour être complet, comment puis-je obtenir mon utilisation complète de l'OP en tenant compte de la mise en page et de la sortie finale de 'ggsave'? –

+0

Je ne sais pas vraiment ce que tu veux dire. Vous pouvez utiliser 'arrangeGrob' au lieu de' grid.arrange' pour stocker le grob composite. – baptiste

+0

C'est exactement ce que je voulais dire –