Ce n'hjust et vjust faire lors d'une parcelle à l'aide de ggplot?
Chaque fois que je fais une parcelle à l'aide de ggplot, je passe un peu de temps à essayer différentes valeurs pour hjust et vjust dans une ligne comme
+ opts(axis.text.x = theme_text(hjust = 0.5))
pour obtenir des étiquettes de l'axe de la ligne jusqu'où les étiquettes de l'axe presque toucher l'axe, et sont alignés contre elle (justifié à l'axe, façon de parler). Cependant, je ne comprends pas vraiment ce qu'il se passe. Souvent, hjust = 0.5
donne des résultats radicalement différents de hjust = 0.6
, par exemple, que je n'ai pas été en mesure de le comprendre, tout en jouant autour avec des valeurs différentes.
Quelqu'un peut-il m'indiquer une explication détaillée de la façon dont hjust et vjust options de travail?
- J'ai fait donner un exemple précis, dans les commentaires à la première réponse. Apparemment, en utilisant des nombres à l'extérieur de 0-1 est pas défini, qui, si elle n'expliquant pas pourquoi hjust=-1 a un comportement bizarre, à moins explique que bizarre est à prévoir.
Vous devez vous connecter pour publier un commentaire.
La valeur de
hjust
etvjust
ne sont que défini entre 0 et 1:Source: ggplot2, Hadley Wickham, page 196
(Oui, je sais que dans la plupart des cas, vous pouvez l'utiliser au-delà de cette gamme, mais ne vous attendez pas à se comporter d'une manière spécifique. C'est hors spec.)
hjust
contrôles justification horizontale etvjust
contrôles justification verticale.Un exemple devrait faire de cette claire:
À comprendre ce qui se passe lorsque vous modifiez la
hjust
dans l'axe de texte, vous devez comprendre que l'alignement horizontal de l'axe de texte est définie en fonction de ne pas l'axe des x, mais à l'ensemble de la parcelle (ce qui comprend l'axe des y de texte). (Ce qui est, à mon avis, regrettable. Il serait beaucoup plus utile d'avoir l'alignement par rapport à l'axe.)Pour explorer ce qui se passe avec
vjust
aligment des étiquettes de l'axe:Error in grid.Call("L_textBounds", as.graphicsAnnot(x$label), x$x, x$y, : Polygon edge not found (zero-width or zero-height?)
pourvjust = .72
et plus.margin
paramètre, mais il a quelques réglages encore fautProbablement le plus définitif est Figure B. 1(d) de la ggplot2 livre, les annexes sont disponibles à http://ggplot2.org/book/appendices.pdf.
Cependant, il n'est pas tout à fait aussi simple que cela.
hjust
etvjust
comme décrit il y a la façon dont il fonctionne dansgeom_text
ettheme_text
(parfois). Une façon de penser, il est de penser à un cadre autour du texte, et où le point de référence est en rapport à cette zone, en unités par rapport à la taille de la boîte (et donc différente pour les textes de taille différente). Unhjust
de 0.5 et unevjust
de 0,5 centre de la boîte sur le point de référence. La réduction dehjust
déplace la boîte à droite par une somme de la largeur de la zone de fois0.5-hjust
. Ainsi, lorsquehjust=0
, le bord gauche de la boîte est au point de référence. L'augmentation dehjust
déplace la boîte à gauche par une somme de la largeur de la zone de foishjust-0.5
. Lorsquehjust=1
, la boîte est déplacé d'un demi-largeur de la zone de gauche, centré, qui met sur le bord droit sur le point de référence. Sihjust=2
, le bord droit de la zone est une zone de largeur à gauche du point de référence (centre est2-0.5=1.5
boîte de largeurs à gauche du point de référence. Pour la verticale, est moins haut et plus est en baisse. C'est effectivement ce que la Figure B. 1(d) dit, mais il extrapole au-delà de [0,1].Mais, parfois, cela ne fonctionne pas. Par exemple
Les trois dernières parcelles sont identiques. Je ne sais pas pourquoi. Aussi, si le texte est mis en rotation, alors que c'est plus compliqué. Envisager
Le premier a les étiquettes justifié à gauche (sur le fond), la deuxième a centré dans une case de sorte que leurs centres de line-up, et le troisième a justifié à droite (à droite côtés de la ligne vers le haut à côté de l'axe). La dernière, bien, je ne peux pas expliquer de manière cohérente. Il a quelque chose à voir avec la taille du texte, la taille de la plus large du texte, et je ne suis pas sûr de ce que d'autre.
DF <- data.frame(x=c("a\na","b","cdefghijk","l"),y=1:4)
- c'est à dire avec un\n
saut de ligne dans l'un de ces titres.hjust
etvjust
ne sont que défini entre 0 et 1; comportement en dehors de cette plage n'a pas besoin de faire sens.hjust=0
aligne le bord gauche avec les tic;hjust=0.5
centres sur les tic;hjust=1
aligne le bord droit avec les tic (déplacement case par rapport au point de référence). Maisvjust
aligne dans une zone de la taille de la plus haut de l'étiquette.vjust
des étiquettes de l'axe, toutes les étiquettes sont simultanément alignés les uns avec les autres. De sorte que tous les bords sont alignées lors devjust=1
et de même tous les bords du bas lorsquevjust=0
. Cela fait beaucoup de sens pour moi.vjust
aligne les étiquettes à l'égard les uns des autres;hjust
aligne les étiquettes à l'égard de la coche. L'ancien aligne dans une zone dont la taille est déterminée par toutes les étiquettes; ce dernier aligne cette boîte à l'égard d'un point de référence (près de la fin de la tique).vjust
. Je suis désolé, mais je ne comprends pas votre commentaire. La boîte englobante reste en place - des étiquettes déplacer à l'intérieur de la boîte.