Зміна розміру шрифту та напрямку тексту осей у ggplot2


188

Я будую графік із категоріальною змінною на осі x та числовою змінною на осі y.

Для осі x, враховуючи, що існує багато точок даних, форматування тексту за замовчуванням призводить до того, що мітка для кожної галочки перетинається з іншими мітками. Як я (a) змінити розмір шрифту для тексту моєї осі та (b) змінити орієнтацію тексту так, щоб текст був перпендикулярний осі?



Існує збіг із stackoverflow.com/q/1330989/946850 , але це питання не стосується зміни розміру тексту.
krlmlr

Відповіді:


292

Використання 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

введіть тут опис зображення

Тут є багато хорошої інформації про те, як відформатувати свої ggplots тут . Ви можете побачити повний список параметрів, які ви можете змінити (в основному, всі) за допомогою ?theme.


2
Я думаю, що так і має бути hjust=1.
Артем Соколов

Правда! Виправлено за коментарем Артема, але я не оновив зображення.
Дрю Стін

67

Ditto @Drew Steen про використання theme(). Ось загальні атрибути теми для осі тексту та заголовків.

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

Використовувати тему ():

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

Додавання до попередніх рішень, можна також вказати розмір шрифту щодо до base_sizeвключені в такі теми, як theme_bw()(де base_sizeє 11) , використовуючи rel()функцію.

Наприклад:

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

5

Створюючи багато сюжетів, має сенс встановити його глобально (відповідна частина - другий рядок, три рядки разом є робочим прикладом):

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

4

Використання атрибута "fill" допомагає у таких випадках. Ви можете вилучити текст із осі за допомогою element_blank()та показати багатоколірну смужку з легендою. Я будую графік частоти видалення деталей у ремонтній майстерні, як показано нижче

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

Я вирішив це рішення у своєму випадку, оскільки у мене було багато барів на смужковій діаграмі, і я не зміг знайти відповідний розмір шрифту, який можна прочитати, а також досить малий, щоб не перекривати один одного.


0

Ще один спосіб впоратися з перекриттями міток - це використання 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()

введіть тут опис зображення

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

введіть тут опис зображення

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.