Zmiana rozmiaru czcionki i kierunku tekstu osi w ggplot2


188

Rysuję wykres ze zmienną kategorialną na osi x i zmienną numeryczną na osi y.

W przypadku osi x, biorąc pod uwagę, że istnieje wiele punktów danych, domyślne formatowanie tekstu powoduje, że etykieta każdego znacznika nachodzi na inne etykiety. Jak (a) zmienić rozmiar czcionki dla tekstu mojej osi i (b) zmienić orientację tekstu, aby tekst był prostopadły do ​​osi?



To nakłada się na stackoverflow.com/q/1330989/946850 , ale to pytanie nie obejmuje zmiany rozmiaru tekstu.
krlmlr

Odpowiedzi:


292

Użyj theme():

d <- data.frame(x=gl(10, 1, 10, labels=paste("long text label ", letters[1:10])), y=rnorm(10))
ggplot(d, aes(x=x, y=y)) + geom_point() +
    theme(text = element_text(size=20),
        axis.text.x = element_text(angle=90, hjust=1)) 
#vjust adjust the vertical justification of the labels, which is often useful

wprowadź opis zdjęcia tutaj

Jest wiele dobrych informacji na temat formatowania ggplots tutaj . Możesz zobaczyć pełną listę parametrów, które możesz zmodyfikować (w zasadzie wszystkie) za pomocą ?theme.


2
Myślę, że tak powinno być hjust=1.
Artem Sokolov

Prawdziwe! Poprawiono według komentarza Artema, ale nie zaktualizowałem obrazu.
Drew Steen,

67

Ditto @Drew Steen o użyciu theme(). Oto typowe atrybuty kompozycji dla tekstu osi i tytułów.

ggplot(mtcars, aes(x = factor(cyl), y = mpg))+
  geom_point()+
  theme(axis.text.x = element_text(color = "grey20", size = 20, angle = 90, hjust = .5, vjust = .5, face = "plain"),
        axis.text.y = element_text(color = "grey20", size = 12, angle = 0, hjust = 1, vjust = 0, face = "plain"),  
        axis.title.x = element_text(color = "grey20", size = 12, angle = 0, hjust = .5, vjust = 0, face = "plain"),
        axis.title.y = element_text(color = "grey20", size = 12, angle = 90, hjust = .5, vjust = .5, face = "plain"))

19

Użyj theme ():

d <- data.frame(x=gl(10, 1, 10, labels=paste("long text label ", letters[1:10])), y=rnorm(10))
ggplot(d, aes(x=x, y=y)) + geom_point() +
theme(text = element_text(size=20))

19

Dodając do poprzednich rozwiązań, możesz również określić rozmiar czcionki w stosunku do base_sizezawartych w motywach, takich jak theme_bw()(gdzie base_sizejest 11) za pomocą rel()funkcji.

Na przykład:

ggplot(mtcars, aes(disp, mpg)) +
  geom_point() +
  theme_bw() +
  theme(axis.text.x=element_text(size=rel(0.5), angle=90))

5

Przy tworzeniu wielu wykresów sensowne jest ustawienie go globalnie (odpowiednia część to druga linia, trzy linie razem to działający przykład):

   library('ggplot2')
   theme_update(text = element_text(size=20))
   ggplot(mpg, aes(displ, hwy, colour = class)) + geom_point()

4

Użycie atrybutu „fill” pomaga w takich przypadkach. Możesz usunąć tekst z osi za pomocą element_blank()i wyświetlić wielokolorowy wykres słupkowy z legendą. Planuję częstotliwość usuwania części w warsztacie, jak poniżej

ggplot(data=df_subset,aes(x=Part,y=Removal_Frequency,fill=Part))+geom_bar(stat="identity")+theme(axis.text.x  = element_blank())

Wybrałem to rozwiązanie w moim przypadku, ponieważ miałem wiele słupków na wykresie słupkowym i nie byłem w stanie znaleźć odpowiedniego rozmiaru czcionki, który byłby zarówno czytelny, jak i wystarczająco mały, aby się nie nakładały.


0

Innym sposobem radzenia sobie z nakładającymi się etykietami jest użycie guide = guide_axis(n.dodge = 2).

library(dplyr)
library(tibble)
library(ggplot2)

dt <- mtcars %>% rownames_to_column("name") %>% 
  dplyr::filter(cyl == 4)

# Overlapping labels
ggplot(dt, aes(x = name, y = mpg)) + geom_point()

wprowadź opis zdjęcia tutaj

ggplot(dt, aes(x = name, y = mpg)) + geom_point() +
  scale_x_discrete(guide = guide_axis(n.dodge = 2))

wprowadź opis zdjęcia tutaj

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.