6
votes

Disposez la largeur de l'intrigue commune avec ggplot à facettes 2.0.0 & gridextra

É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 xxx

 Entrez la description de l'image ici

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.

Pourrait-il être que la nouvelle version GGPLot2 est en train de gâcher avec les largeurs GTAble?

Quelqu'un connaît une solution de contournement?

Merci Vous avez beaucoup

EDIT: Ajout de la photo du graphique

Je cherche quelque chose comme:

 Entrez la description de l'image ici


13 commentaires

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])


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' . 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 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') (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]] - 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] ). La gTable est mal documentée et ne peut trouver nulle part quels sont les différents nombres dans g.iris $ largeurs 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 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ù!


4 Réponses :


0
votes

Décollant ces deux lignes et garder le reste, cela fonctionnait bien. XXX

Entrez la description de l'image ici

probablement limitait la largeur d'entre eux.


4 commentaires

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.



0
votes

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
)


0 commentaires

1
votes

6 commentaires

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