ggplot2: Divisez la légende en deux colonnes, chacune avec son propre fichier
J'ai ces facteurs
require(ggplot2)
names(table(diamonds$cut))
# [1] "Fair" "Good" "Very Good" "Premium" "Ideal"
qui je veux diviser visuellement en deux groupes dans la légende (en indiquant aussi le nom du groupe):
Du"premier groupe" -> "Juste", "Bon"
et
"Deuxième groupe" -> "Très Bon", "Premium", "Idéal"
De départ avec cette intrigue
ggplot(diamonds, aes(color, fill=cut)) + geom_bar() +
guides(fill=guide_legend(ncol=2)) +
theme(legend.position="bottom")
Je veux obtenir
(à noter que "Très Bon", a glissé dans la deuxième colonne/groupe)
source d'informationauteur CptNemo
Vous devez vous connecter pour publier un commentaire.
Vous pouvez déplacer la "Très Bonne" catégorie de la deuxième colonne de la légende par l'ajout d'un mannequin facteur de niveau et réglage de sa couleur en blanc dans la légende, de sorte qu'il ne peut pas être vu. Dans le code ci-dessous, nous ajoutons un vide facteur de niveau entre les "Bons" et "Très Bon", de sorte que nous avons maintenant six niveaux. Ensuite, nous utilisons
scale_fill_manual
pour définir la couleur de ce nouveau niveau de "blanc".drop=FALSE
forcesggplot
pour maintenir le vide au niveau de la légende. Il pourrait y avoir une façon plus élégante de contrôle oùggplot
endroits les valeurs de la légende, mais au moins cela permettra de faire le travail.Mise à JOUR:je l'espère, il ya une meilleure façon d'ajouter des titres de chaque groupe dans la légende, mais la seule option que je peux trouver pour l'instant est de recourir à la grobs, qui me donne toujours un mal de tête. Le code ci-dessous est une adaptation de la réponse à cette SORTE de question. Il ajoute deux texte grobs, un pour chaque étiquette, mais les étiquettes doivent être positionnés à la main, qui est une énorme douleur. Le code de la parcelle doit également être modifié pour créer plus d'espace pour la légende. En outre, même si j'ai désactivé l'écrêtage pour tous les grobs, les étiquettes sont encore coupées par la légende grob. Vous pouvez positionner les étiquettes à l'extérieur de la zone tondue, mais alors, ils sont trop loin de la légende. J'espère que quelqu'un qui vraiment sait comment travailler avec les grobs pouvez résoudre ce problème et, plus généralement, améliorer le code ci-dessous (@baptiste, êtes-vous là?).
Et voici le résultat:
Cela ajoute les titres de la légende du gtable. Il utilise @eipi10 technique pour le déplacement de la "très bonne" catégorie dans la deuxième colonne de la légende (merci).
La méthode des extraits de la légende de l'intrigue. La légende du gtable peuvent être manipulés. Ici, une ligne supplémentaire est ajouté à la gtable, et les titres sont ajoutés à la nouvelle ligne. La légende (après un peu de fine-tuning) est ensuite replacé dans l'intrigue.
En suivant l'idée de @eipi10, vous pouvez ajouter le nom des titres comme des étiquettes, avec
white
valeurs:Je introduire quelques espaces blancs après
"Title 1 "
pour séparer les colonnes et d'améliorer la conception, mais il pourrait y avoir une option pour augmenter l'espace.Le seul problème est que je n'ai aucune idée de comment changer le format de la "titre" étiquettes (j'ai essayé
bquote
ouexpression
mais il ne fonctionne pas)._____________________________________________________________
Selon le graphique que vous tentezun alignement à droite de la légende pourrait être une meilleure alternative, et ce truc a l'air mieux (à mon humble avis). Il sépare la légende en deux, et d'utiliser l'espace au mieux. Tout ce que vous avez à faire est de changer le
ncol
retour à1
et"bottom"
(legend.position
) à"right"
:Dans ce cas, il pourrait être judicieux de laisser le titre dans cette version, par la suppression de
legend.title=element_blank()