2017-10-13 10 views
0

Je prépare un tableau dans lequel j'ai l'obligation pour le client de placer la même légende en haut et en bas. En utilisant ggplot, je peux le mettre en haut ou en bas. Mais je ne suis pas au courant de l'option de dupliquer aux deux endroits.Dupliquer deux fois la même légende dans Ggplot2

J'ai essayé de mettre legend.position comme c ('top', 'bottom') mais cela me donne une erreur et je sais si je devrais donner une erreur.

Peut-il être fait avec d'autres bibliothèques? Je veux deux fois la même légende en haut et en bas?

Prenez ce code pour une instance

library(ggplot2) 
bp <- ggplot(data=PlantGrowth, aes(x=group, y=weight, fill=group)) + geom_boxplot() 
bp <- bp + theme(legend.position="bottom") 
bp 
+0

Vous pouvez créer une légende ggplot et une figure ggplot séparées et vous pouvez les combiner et les organiser en une figure composée. Veuillez fournir un exemple reproductible si vous avez besoin de détails. – Djork

+0

@Djork - Terminé. Prenez cet exemple et ajoutez la légende sur le dessus aussi. – vrajs5

Répondre

1

Vous devez travailler avec les objets graphiques intermédiaires (Grobs) qui utilise ggplot2 lors de son tracé.

J'ai saisi une fonction qui circulait ici sur StackOverflow pour extraire la légende, et la mettre dans un paquet qui est maintenant sur CRAN.

Voici une solution:

library(lemon) 
bp <- bp + theme(legend.position='bottom') 
g <- ggplotGrob(bp) 
l <- g_legend(g) 
grid.arrange(g, top=l) 

g_legend accepte à la fois la version Grob (qui ne peut être manipulé avec des objets ggplot2) et les objets ggplot2 ordinaires. L'utilisation de ggplotGrob est une rue à sens unique; Une fois converti, vous ne pouvez plus le convertir en ggplot2. Mais, comme dans l'exemple, nous conservons l'objet original ggplot2. ;)