J'ai deux ggplots avec lesquels je m'aligne horizontalement grid.arrange
. J'ai parcouru de nombreux messages sur le forum, mais tout ce que j'essaye semble être des commandes qui sont maintenant mises à jour et nommées autre chose.
Mes données ressemblent à ceci;
# Data plot 1
axis1 axis2
group1 -0.212201 0.358867
group2 -0.279756 -0.126194
group3 0.186860 -0.203273
group4 0.417117 -0.002592
group1 -0.212201 0.358867
group2 -0.279756 -0.126194
group3 0.186860 -0.203273
group4 0.186860 -0.203273
# Data plot 2
axis1 axis2
group1 0.211826 -0.306214
group2 -0.072626 0.104988
group3 -0.072626 0.104988
group4 -0.072626 0.104988
group1 0.211826 -0.306214
group2 -0.072626 0.104988
group3 -0.072626 0.104988
group4 -0.072626 0.104988
#And I run this:
library(ggplot2)
library(gridExtra)
groups=c('group1','group2','group3','group4','group1','group2','group3','group4')
x1=data1[,1]
y1=data1[,2]
x2=data2[,1]
y2=data2[,2]
p1=ggplot(data1, aes(x=x1, y=y1,colour=groups)) + geom_point(position=position_jitter(w=0.04,h=0.02),size=1.8)
p2=ggplot(data2, aes(x=x2, y=y2,colour=groups)) + geom_point(position=position_jitter(w=0.04,h=0.02),size=1.8)
#Combine plots
p3=grid.arrange(
p1 + theme(legend.position="none"), p2+ theme(legend.position="none"), nrow=1, widths = unit(c(10.,10), "cm"), heights = unit(rep(8, 1), "cm")))
Comment extraire la légende de l'un de ces tracés et l'ajouter au bas / au centre du tracé combiné?
Réponses:
Mise à jour 2015-février
Voir la réponse de Steven ci-dessous
Voici le graphique résultant:
la source
arrangeGrob()
. Vous devez également inverser les hauteurs (c'estheights=c(1,10)
Vous pouvez également utiliser ggarrange du package ggpubr et définir "common.legend = TRUE":
la source
print(ggarrangeobject)
autour d'un de mesggarrange
objets quand j'avais besoin qu'il soit tracé par une autre fonction, qui peut être similaire à la solution pour votrerenderPlot()
?common.legend = TRUE
c'est tout ce dont j'ai besoin!La réponse de Roland doit être mise à jour. Voir: https://github.com/hadley/ggplot2/wiki/Share-a-legend-between-two-ggplot2-graphs
Cette méthode a été mise à jour pour ggplot2 v1.0.0.
Notez le manque de
ggplot_gtable
etggplot_build
.ggplotGrob
est utilisé à la place. Cet exemple est un peu plus compliqué que la solution ci-dessus, mais il l'a toujours résolu pour moi.la source
grid_arrange_shared_legend
? Je vous remercie!ncol = 1
?Une nouvelle solution attrayante consiste à utiliser
patchwork
. La syntaxe est très simple:Créé le 13/12/2019 par le package reprex (v0.2.1)
la source
combined <- p1 + p2 + plot_layout(guides = "collect") & theme(legend.position = "bottom")
Je suggère d'utiliser cowplot. De leur vignette R :
la source
annotate_figure(ggarrange())
, en utilisant une legend_b (). Merci beaucoup, que Dieu vous bénisse!@Giuseppe, vous voudrez peut-être considérer ceci pour une spécification flexible de la disposition des parcelles (modifiée à partir d' ici ):
Arguments supplémentaires
nrow
etncol
contrôlez la disposition des tracés arrangés:la source
Si vous tracez les mêmes variables dans les deux tracés, le moyen le plus simple serait de combiner les blocs de données en un seul, puis d'utiliser facet_wrap.
Pour votre exemple:
Un autre exemple utilisant l'ensemble de données des diamants. Cela montre que vous pouvez même le faire fonctionner si vous n'avez qu'une seule variable commune entre vos parcelles.
La seule chose délicate avec le deuxième exemple est que les variables de facteur sont forcées à être numériques lorsque vous combinez tout dans une seule trame de données. Donc, idéalement, vous le ferez principalement lorsque toutes vos variables d'intérêt sont du même type.
la source
@Guiseppe:
Je n'ai aucune idée de Grobs, etc., mais j'ai piraté ensemble une solution pour deux parcelles, devrait être possible d'étendre à un nombre arbitraire mais ce n'est pas dans une fonction sexy:
la source
Si la légende est la même pour les deux tracés, il existe une solution simple utilisant
grid.arrange
(en supposant que vous voulez que votre légende s'aligne avec les deux tracés verticalement ou horizontalement). Conservez simplement la légende du tracé le plus bas ou le plus à droite tout en omettant la légende de l'autre. L'ajout d'une légende à un seul tracé, cependant, modifie la taille d'un tracé par rapport à l'autre. Pour éviter cela, utilisez laheights
commande pour ajuster manuellement et conserver la même taille. Vous pouvez même utilisergrid.arrange
pour créer des titres d'axes communs. Notez que cela nécessiteralibrary(grid)
en plus delibrary(gridExtra)
. Pour les tracés verticaux:y_title <- expression(paste(italic("E. coli"), " (CFU/100mL)"))
grid.arrange(arrangeGrob(p1, theme(legend.position="none"), ncol=1), arrangeGrob(p2, theme(legend.position="bottom"), ncol=1), heights=c(1,1.2), left=textGrob(y_title, rot=90, gp=gpar(fontsize=20)))
Voici le résultat d'un graphique similaire pour un projet sur lequel je travaillais:
la source