Étant donné que j'ai mis à jour GGPLot2 2.0.0, je ne peux pas organiser de graphiques en utilisant Grisextra. Le problème est que les graphiques à facettes seront compressés pendant que d'autres augmenteront. Les largeurs sont fondamentalement gâchées. Je veux les organiser de manière similaire à la façon dont ces parcelles à facettes sont les suivantes: Aligner à gauche deux bords graphiques (ggplot)
i Mettez un code reproductible p> comme Vous verrez, le graphique supérieur, la première facette est élargi tandis que les 2 autres sont compressés à droite. Le graphique inférieur ne couvre pas la largeur de toutes les largeurs. P> Pourrait-il être que la nouvelle version GGPLot2 est en train de gâcher avec les largeurs GTAble? P> Quelqu'un connaît une solution de contournement? P> Merci Vous avez beaucoup p> EDIT: Ajout de la photo du graphique P> Je cherche quelque chose comme: p>
4 Réponses :
Décollant ces deux lignes et garder le reste, cela fonctionnait bien. probablement limitait la largeur d'entre eux. p> p>
Merci pour les commentaires, mais ce n'est qu'un cas reproductible. Mon cas réel est beaucoup plus complexe et la suppression de ces lignes rendent les graphiques qui ne sont pas correctement alignés. En fait, l'erreur reproductible ne produit pas de cartes alignées non plus si nous supprimons ces lignes
Que veux-tu accomplir? Vous voulez mettre tous les tableaux d'affilée?
Ma configuration originale est une ligne de 4 rangée, 1 ensemble de graphiques alignés (1 graphique par rangée). Avec GGPLOT2 1.0.1 Ceci est fait avec le code ci-dessus, mais avec GGPLot2 2.0.0 produit le bogue affiché dans les graphiques que vous pouvez voir dans mon premier post.
@Jordidal votre code d'origine ne doit pas fonctionner avec GGPLot2 version 1.0.0, et je viens de le confirmer. La raison en est que les GTBLES des deux parcelles ont un nombre différent de colonnes. Il se peut que cela ait fonctionné une fois lors de la sélection des trois premières colonnes; Ensuite, il aurait brisé à propos de GGPLot V2. Le correctif était d'appliquer l'unité.Liste fonction de la grille. Mais selon ce , il pourrait être corrigé avec La prochaine version de R. Mais la compression des facettes n'est rien à voir avec cela. Cela arrive toujours dans ggplot v1.
Ceci est laid mais si vous êtes sous une pression de temps, ce hack fonctionnera (non généralisable et dépendant de la taille de la fenêtre de la parcelle). Fondez fondamentalement la parcelle supérieure 2 colonnes avec une parcelle vierge à droite et devinez aux largeurs.
grid.arrange( grid.arrange(plot.iris, ggplot() + theme_minimal(),ncol=2, widths = c(.9, .1)), plot.mpg, ncol=1 )
Je ne sais pas si vous recherchez toujours une solution, mais c'est assez général. J'utilise ggplot 2.1.0 (maintenant sur le cran). Il est basé sur cette solution < / a>. Je brise le problème en deux parties. Premièrement, je traite avec le côté gauche des parcelles, en veillant à ce que les largeurs du matériau de l'axe soient les mêmes. Cela a déjà été fait par d'autres personnes et il y a des solutions. Mais je ne pense pas que le résultat a l'air bien. Je préférerais aussi que les panneaux alignent également sur le côté droit. Donc, seconde, la procédure garantit que les largeurs des colonnes à droite des panneaux sont les mêmes. Cela le fait en ajoutant une colonne de largeur appropriée à droite de chacune des parcelles. (Il y a peut-être des façons de Néater de le faire. Il y a - voir la solution @baptiste.)
Je me suis toujours demandé pourquoi GGPLOT ne garde pas toujours un espace vide de toute façon, quelle que soit la légende d'être là ou non. Les légendes BTW ne sont pas toujours du côté droit, qui peuvent devenir un cauchemar si vous visez la pleine généralité.
Que diriez-vous de diviser chaque intrigue en trois GTBLES indépendantes correspondant aux groupes suivants: gauche, panneaux, droit et alignant ces trois séparément?
J'ai pensé aux trois régions. Je vais lui donner une nouvelle pensée, mais pas pour quelques jours. Si vous voulez entrer avec une solution, n'hésitez pas.
En fait, j'ai un peu joué avec cette idée et il ne semble rien faire plus facilement, bien au contraire.
J'ai posté une solution révisée. C'est un peu plus général. Il ne cherche pas des légendes comme ce fut le cas de la solution d'origine. Il est plutôt garanti que les largeurs des espaces à droite des panneaux sur les parcelles sont les mêmes.
L'idée 3x3 peut être faite au travail (voir le paquet d'œufs) mais c'était un peu fidèle à la justification des axes de gauche
Une option consiste à massager chaque parcelle dans une gtable 3x3, où la cellule centrale enveloppe tous les panneaux de tracé.
Utilisation de l'exemple de @sandymuspratt p> L'avantage étant une fois dans cette normalisation Format, les parcelles peuvent être combinées dans diverses dispositions beaucoup plus facilement, quel que soit le nombre de panneaux, de légendes, d'axes, de bandes, etc. p>
Votre emballage d'œufs est un joyau! Aligner chaque élément est purement génial. Les parcelles à facettes et à faillettes sont ensuite alignées sur la zone de la parcelle. Et les étiquettes d'axe peuvent avoir différentes longueurs! Fait ma journée et beaucoup plus à venir à coup sûr. Merci beaucoup!
C'est une solution géniale! Je me demande s'il est possible de contrôler la taille desquelles différentes parcelles individuelles sont dans œuf code>? Par exemple, Plot1 est 1/2 la taille de la parcelle combinée tandis que Terrain2 à 4 place dans la moitié restante. Merci!
(En supposant que vous parlez du dernier exemple, 2x2 layouche), c'est genre de quelles largeurs (devrait faire); Il y a un bug que ce soit que IIRC pour que vous puissiez devoir modifier manuellement les largeurs / hauteurs gTables résultantes dans certains cas
Comment puis-je changer la hauteur des bandes? Parce que lorsque j'utilise ggarrange pour combiner dans ggplot () + facet_grid () pour un autre ggplot (), ces bandes deviennent courtes.
g.iris $ largeurs et g.iris $ largeurs sont différentes longueurs donc (je pense) que vous ne pouvez pas appliquer directement unité.pmax à travers eux. Essayez donc simplement d'appliquer les largeurs pour la partie à gauche et à droite des panneaux.
max.widths <- unité.pmax (iris.widths [1: 3], MPG.Widths [1: 3]); g.iris $ largeurs [1: 3] <- max.widths; g.mpg $ largeurs [1: 3] <- max.widths; g.iris $ largeurs [9] <- unité.c (G.mpg $ largeurs [5] + g.mpg $ largeurs [6]) code>
Merci pour la suggestion! J'ai également essayé de sousper des largeurs, mais je n'ai pas fonctionné non plus. La dernière partie du code que je ne l'ai pas vue auparavant, mais lorsque je l'applique, je reçois une erreur de grid.arrange (et de grid.draw)
erreur dans l'unité (largeurs, défauts.units): ( Liste) L'objet ne peut pas être contraint de taper 'double' code>. J'ai également essayé de rechercher ce que chaque nombre de largeurs gtables signifie, mais je n'ai pas réussi à obtenir cette information
Pour votre exemple ci-dessus, il devrait fonctionner sans erreur - me fait pour moi (si c'est la meilleure façon de le faire est une autre question;)). J'ai remplacé vos trois lignes
max.widths <- unité.pmax (iris.widths, mpg.Widths); ; g.iris $ largeurs <- max.widths; g.mpg $ largeurs <- max.widths code> avec les quatre lignes du commentaire ci-dessus.
Ensuite, ceci est très étrange, car pour moi, cela jette l'erreur, sur l'exemple du code que j'ai fourni ... Je vais tester sur une autre machine demain voir si cela fait une différence
Pourrait être une version de version ... Je ne suis pas assez familier avec la grille à connaître .. Mais Fwiw .. RV3.2.3, Gridextra V2.1.0, GGPLOT2 V2.0.0
J'ai mis à jour avec ce que je ressentais était plus précisément capturer le chapeau que vous après. Je suis hors de base s'il vous plaît roulez la modification.
J'ai vérifié avec une autre machine et j'ai la même erreur (sur les machines Mac et Linux). Je suis avec R 3.2.3, ggplot2 2.0.0 mais gridextra 2.0.0. Où avez-vous eu la version 2.1.0? La version disponible à Cran est 2.0.0
@Jordidal; de github ..
devtools :: install_github ('baptiste / gridextra') code> (je me demande si vous aviez besoin de le faire précédemment
g.iris $ largeurs [[9]] <- Unité.c (G.mpg $ largeurs [[5]] + g.mpg $ largeurs [[6]] code> - je ne me souviens pas)
@Jordidal; Juste pour mettre à jour. J'ai essayé le code dans mon premier commentaire sur un système Windows R avec des packages plus anciens (RV3.2.0, GridRextra V2.0, GGPLOT V1.0.1) et cela a fonctionné sans problème. Après avoir mis à jour GGPLot2 sur V2, il a reçu le problème que vous avez mentionné dans votre commentaire (G.MPG $ Larthes a une structure différente qu'auparavant après l'avoir attribuée aux largeurs). Après avoir mis à jour GRIDRXTRA vers la version de Dev de GitHub, le problème résolu. (Je me demande s'il s'agit de faire avec gtable alors ??)
Salut user20650. Merci beaucoup d'avoir montré sur Install_Github! En effet, il résolut le problème. J'ai appliqué la solution à mon codage d'origine, mais j'ai eu des problèmes avec les parcelles ne rendant pas correctement (j'ai 4 diagrammes différents, 1 par ligne). La seule façon dont j'ai la solution consiste à prendre la largeur de 1 des parcelles et à l'affecter au reste, sans utiliser unité.pmax (
largeurs G.iris $ [1: 3] <- g.mpg $ largeurs [ 1: 3] code>). La gTable est mal documentée et ne peut trouver nulle part quels sont les différents nombres dans
g.iris $ largeurs code> sont, ce qui augmente la difficulté d'essayer de le résoudre. Merci beaucoup pour l'aide!
@Jordidal; Ceux-ci peuvent aider à voir la disposition de la parcelle.
GTABLE :: GTABLE_SHOW_LAYOUT (G.IRIS); g.iris $ mise en page code> dans la parcelle.iris, nous avons neuf largeurs, alors concentrez-vous sur les panneaux horizontaux moyens, de gauche à droite, nous avons la marge extérieure gauche, 2) l'espace pour le titre de l'axe, 3) Etiquettes d'axe / Ticks, 4) Terrain (facette gauche), 5) Espace entre la facette, 6) Terrain (facette moyenne), 7) espace entre la facette, 8) Terrain (facette droite), 9) la marge extérieure droite.
Notez que l'autre parcelle a également une légende à droite de la parcelle, pourquoi nous ajoutons la largeur de la légende + la légende externe et écrasez la largeur de la marge droite de G.iris.
Avez-vous peut-être une compréhension des différentes valeurs trouvées dans les largeurs? Je ne peux pas sembler le trouver n'importe où!