Co robią hjust i vjust podczas tworzenia fabuły za pomocą ggplot?
Za każdym razem, gdy robię Wykres używając ggplot, spędzam trochę czasu próbując różnych wartości dla hjust i vjust w linii takiej jak
+ opts(axis.text.x = theme_text(hjust = 0.5))
Aby etykiety osi ustawiły się w linii, w której etykiety osi prawie dotykają osi i są wyrównane do niej (że tak powiem justowane do osi). Jednak nie bardzo rozumiem, o co chodzi. Często hjust = 0.5
daje tak dramatycznie różne wyniki od hjust = 0.6
, na przykład, że nie byłem w stanie tego rozgryźć tylko bawiąc się z różne wartości.
Czy ktoś może wskazać mi wyczerpujące wyjaśnienie, jak działają opcje hjust i vjust?
2 answers
Wartości hjust
i vjust
są zdefiniowane tylko pomiędzy 0 a 1:
- 0 oznacza lewo-uzasadnione
- 1 oznacza prawo-uzasadnione
źródło: ggplot2, Hadley Wickham, strona 196
(tak, Wiem, że w większości przypadków można go używać poza tym zakresem, ale nie oczekuj, że zachowa się w jakiś szczególny sposób. To jest poza specyfikacją.)
hjust
kontroluje poziome justowanie i vjust
kontroluje pionowe justowanie.
Przykład powinien wyjaśnij to:
td <- expand.grid(
hjust=c(0, 0.5, 1),
vjust=c(0, 0.5, 1),
angle=c(0, 45, 90),
text="text"
)
ggplot(td, aes(x=hjust, y=vjust)) +
geom_point() +
geom_text(aes(label=text, angle=angle, hjust=hjust, vjust=vjust)) +
facet_grid(~angle) +
scale_x_continuous(breaks=c(0, 0.5, 1), expand=c(0, 0.2)) +
scale_y_continuous(breaks=c(0, 0.5, 1), expand=c(0, 0.2))
Aby zrozumieć, co się dzieje po zmianie hjust
w tekście osi, musisz zrozumieć, że wyrównanie poziome dla tekstu osi jest zdefiniowane Nie w odniesieniu do osi x, ale do całego wykresu (gdzie obejmuje to tekst osi y). (Jest to, moim zdaniem, niefortunne. O wiele bardziej przydatne byłoby wyrównanie względem osi.)
DF <- data.frame(x=LETTERS[1:3],y=1:3)
p <- ggplot(DF, aes(x,y)) + geom_point() +
ylab("Very long label for y") +
opts(axis.title.y=theme_text(angle=0))
p1 <- p + opts(axis.title.x=theme_text(hjust=0)) + xlab("X-axis at hjust=0")
p2 <- p + opts(axis.title.x=theme_text(hjust=0.5)) + xlab("X-axis at hjust=0.5")
p3 <- p + opts(axis.title.x=theme_text(hjust=1)) + xlab("X-axis at hjust=1")
library(ggExtra)
align.plots(p1, p2, p3)
Aby zbadać, co się dzieje z vjust
oznaczenie osi:
DF <- data.frame(x=c("a\na","b","cdefghijk","l"),y=1:4)
p <- ggplot(DF, aes(x,y)) + geom_point()
p1 <- p + opts(axis.text.x=theme_text(vjust=0, colour="red")) +
xlab("X-axis labels aligned with vjust=0")
p2 <- p + opts(axis.text.x=theme_text(vjust=0.5, colour="red")) +
xlab("X-axis labels aligned with vjust=0.5")
p3 <- p + opts(axis.text.x=theme_text(vjust=1, colour="red")) +
xlab("X-axis labels aligned with vjust=1")
library(ggExtra)
align.plots(p1, p2, p3)
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-09-01 16:11:40
Prawdopodobnie najbardziej ostateczny jest rysunek B. 1(d) z książki ggplot2, której załączniki są dostępne na http://ggplot2.org/book/appendices.pdf .
Nie jest to jednak takie proste.hjust
i vjust
zgodnie z opisem, jak to działa w geom_text
i theme_text
(czasami). Jednym ze sposobów myślenia o tym jest myślenie o polu wokół tekstu i gdzie punkt odniesienia jest w stosunku do tego pola, w jednostkach w stosunku do rozmiaru z pudełka (a więc różne dla tekstów o różnej wielkości). hjust
o wartości 0,5 i vjust
o wartości 0,5 wyśrodkowują pole na punkcie odniesienia. Redukcja hjust
przesuwa pole w prawo o ilość razy szerokości pola 0.5-hjust
. Tak więc, gdy hjust=0
, lewa krawędź pola znajduje się w punkcie odniesienia. Zwiększenie hjust
przesuwa pole w lewo o ilość razy szerokości pola hjust-0.5
. Gdy hjust=1
, pole jest przesunięte o połowę szerokości pola w lewo od środka, co umieszcza prawą krawędź na punkcie odniesienia. If hjust=2
, prawa krawędź pudełka to szerokość Pudełka na lewo od punktu odniesienia (środek to 2-0.5=1.5
szerokość Pudełka na lewo od punktu odniesienia. W pionie mniej jest w górę, a Więcej w dół. To jest faktycznie to, co mówi rysunek B. 1(d), ale ekstrapoluje poza [0,1].
Ale czasami to nie działa. Na przykład
DF <- data.frame(x=c("a","b","cdefghijk","l"),y=1:4)
p <- ggplot(DF, aes(x,y)) + geom_point()
p + opts(axis.text.x=theme_text(vjust=0))
p + opts(axis.text.x=theme_text(vjust=1))
p + opts(axis.text.x=theme_text(vjust=2))
Trzy ostatnie działki są identyczne. Nie wiem dlaczego. Ponadto, jeśli tekst jest obrócony, jest to bardziej skomplikowane. Rozważmy
p + opts(axis.text.x=theme_text(hjust=0, angle=90))
p + opts(axis.text.x=theme_text(hjust=0.5 angle=90))
p + opts(axis.text.x=theme_text(hjust=1, angle=90))
p + opts(axis.text.x=theme_text(hjust=2, angle=90))
Pierwszy ma etykiety w lewo justowane (na dole), drugi ma je wyśrodkowane w jakimś polu, więc ich środki wyrównują się, a trzeci ma je w prawo justowane(więc ich prawe boki ustawiają się obok osi). Ostatniego, cóż, nie potrafię wyjaśnić w spójny sposób. Ma to coś wspólnego z wielkością tekstu, wielkością najszerszego tekstu i nie jestem pewien, co jeszcze.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-05-19 19:59:57