Je combine deux parcelles distinctes dans une disposition de grille avec Ce que je reçois est proche de ce que je veux, mais les parcelles ne sont pas exactement alignées (montrées par les flèches que j'ai ajoutées) : p> p> Je voudrais régions de parcelle (pas les légendes) pour correspondre exactement. Comment cela peut-il être atteint? La différence ici n'est pas si grosse mais que vous ajoutez des conditions au graphique à barres ci-dessous ou de les créer des graphiques à barres estimées avec La solution GGPLOT standard ne peut pas être facilement traduite dans RPY2: P> grille code> comme suggéré par @lgautier dans RPY2 à l'aide de Python. La parcelle supérieure est une densité et et le graphique de barre inférieur:
position_dodge code> Les différences peuvent devenir très grandes et les parcelles ne sont pas alignées. p>
Arrangez code> apparaît code> grid_arrange code> dans
grisextra : P>
Error: VECTOR_ELT() can only be applied to a 'list', not a 'double'
*** longjmp causes uninitialized stack frame ***: python2.7 terminated
======= Backtrace: =========
/lib/x86_64-linux-gnu/libc.so.6(__fortify_fail+0x37)[0x7f83742e2817]
/lib/x86_64-linux-gnu/libc.so.6(+0x10a78d)[0x7f83742e278d]
/lib/x86_64-linux-gnu/libc.so.6(__longjmp_chk+0x33)[0x7f83742e26f3]
...
7f837591e000-7f8375925000 r--s 00000000 fc:00 1977264 /usr/lib/x86_64-linux-gnu/gconv/gconv-modules.cache
7f8375926000-7f8375927000 rwxp 00000000 00:00 0
7f8375927000-7f8375929000 rw-p 00000000 00:00 0
7f8375929000-7f837592a000 r--p 00022000 fc:00 917959 /lib/x86_64-linux-gnu/ld-2.15.so
7f837592a000-7f837592c000 rw-p 00023000 fc:00 917959 /lib/x86_64-linux-gnu/ld-2.15.so
7ffff4b96000-7ffff4bd6000 rw-p 00000000 00:00 0 [stack]
7ffff4bff000-7ffff4c00000 r-xp 00000000 00:00 0 [vdso]
ffffffffff600000-ffffffffff601000 r-xp 00000000 00:00 0 [vsyscall]
Aborted (core dumped)
3 Réponses :
Split les légendes des parcelles (voir GGPLOT Légende séparée et intrigue A>), utilisez alors ceci est évidemment la mise en œuvre grid.arrange code>
r code>. p> p>
Merci mais ce n'est pas du tout clair comment traduire cela en RPY2 et j'aimerais éviter de définir de nouvelles fonctions pure r car cela complique la traduction encore plus
Aligner deux parcelles devient beaucoup plus difficile lorsque les facettes sont impliquées. Je ne sais pas s'il y a une solution générale, même dans R. Considérez ce scénario,
library(gtable) # legend, if it exists, may be the second last item on the right, # unless it's not on the right side. locate_guide <- function(g){ right <- max(g$layout$r) gg <- subset(g$layout, (grepl("guide", g$layout$name) & r == right - 1L) | r == right) sort(gg$r) } compare_left <- function(g1, g2){ w1 <- g1$widths[1:3] w2 <- g2$widths[1:3] unit.pmax(w1, w2) } align_lr <- function(g1, g2){ # align the left side left <- compare_left(g1, g2) g1$widths[1:3] <- g2$widths[1:3] <- left # now deal with the right side gl1 <- locate_guide(g1) gl2 <- locate_guide(g2) if(length(gl1) < length(gl2)){ g1$widths[[gl1]] <- max(g1$widths[gl1], g2$widths[gl2[2]]) + g2$widths[gl2[1]] } if(length(gl2) < length(gl1)){ g2$widths[[gl2]] <- max(g2$widths[gl2], g1$widths[gl1[2]]) + g1$widths[gl1[1]] } if(length(gl1) == length(gl2)){ g1$widths[[gl1]] <- g2$widths[[gl2]] <- unit.pmax(g1$widths[gl1], g2$widths[gl2]) } grid.arrange(g1, g2) } align_lr(g1, g2)
Mais les gens font des grilles complexes de parcelles dans tout le temps .. alors quelle est la manière générale de le faire? Existe-t-il un moyen d'obtenir l'intrigue originale que j'ai faite dans le poteau à l'aide de facettes, tout à l'intérieur de la face ggplot (avec facet_wrap et facet_grid) afin d'éviter complètement la grille séparée? Peut-être que je ne connais tout simplement pas les utilisations avancées de facettes
Une question sur votre exemple: si vous avez supprimé la légende pour am code>, seriez-vous capable de les aligner dans R?
Un autre suivi: Comment général est cette méthode d'utilisation de différents types de GEOM sur différents sous-ensemble des données? Cela vous permettrait-il de créer l'intrigue que je voulais dans l'article original à l'aide d'une combinaison de geom_density code> et
geom_bar code>? Stackoverflow.com/questions/7903972/...
Je ne suis pas sûr d'avoir ce que vous voulez dire, mais dans tous les cas, vous ne serez pas en mesure d'avoir un terrain avec 3 facettes sur la rangée supérieure et une facette qui couvre la largeur complète de la rangée inférieure. Vous devez utiliser deux parcelles pour cela.
traduction non testée de la réponse à l'aide de gridextra code> 's
grid.arrange () code>. Les côtés gauche des parcelles (où les étiquettes pour l'axe des Y sont) ne peuvent pas toujours être alignées cependant.
from rpy2.robjects.packages import importr
gridextra = importr('gridExtra')
from rpy2.robjects.lib import ggplot2
_ggplot2 = ggplot2.ggplot2
def dollar(x, name): # should be included in rpy2.robjects, may be...
return x[x.index(name)]
def g_legend(a_gplot):
tmp = _ggplot2.ggplot_gtable(_ggplot2.ggplot_build(a_gplot))
leg = [dollar(x, 'name')[0] for x in dollar(tmp, 'grobs')].index('guide-box')
legend = dollar(tmp, 'grobs')[leg]
return legend
legend1 = g_legend(p1)
legend2 = g_legend(p2)
nolegend = ggplot2.theme(**{'legend.position': 'none'})
gridexta.grid_arrange(p1 + nolegend, legend1,
p2 + nolegend, legend2,
ncol=2, widths = FloatVector((5.0/6,1.0/6)))
Ceux qui l'ont marqué comme un duplicata ont une appréciation nulle des subtilités de la traduction du code de RPY2. Oui, parfois la traduction est facile mais parfois elle est contre-intuitive. Ceci est une question RPY2. Pas une question de ggplot2 tout droit. Vous êtes juste interférant et bloquant le processus de question et de réponse sans bonne raison.
unité.pmax code> est une fonction distincte de l'unité code> (bien que les deux sont dans la grille
grille code>). Y a-t-il un
grid.unit.pmax code> disponible en python après
grille = importr ("grille") code>? Ou fait-il
rpy code> faire une translation sur des points dans les noms de fonction qui ne sont pas liés à la méthode S3 Dispatch?
@Briandiggs semble que
grille :: unité.pmax code> deviendrait
grid.unit_pmax code>
@baptiste: Vous avez raison, merci, mais je ne sais toujours pas comment accéder aux objets
grob code> de RPY2, voir Modifications
J'ai bien peur que je ne puisse pas aider; Cette syntaxe RPY est complètement étrangère pour moi.
Quelle est la sortie de vos dernières commandes?
@baptiste: Réponse modifiée pour avoir des commandes. Je pense que je suis proche mais manque quelque chose de petit - peut-être passer par la valeur par rapport à la question de référence? pas certain
Il me semble que les champs de largeur de GA et GB n'ont pas été mis à jour sur les nouvelles valeurs de WA et WB.
@baptiste: Mais ressemble-t-il à
wa code> et
wb code> a été mis à jour correctement?
@ user248237dfsf - Segfault ne devrait pas arriver. L'avez-vous signalé sur le tracker d'émission pour RPY2?