Изменение размера шрифта и направления текста осей в ggplot2

188

Я строю график с категориальной переменной на оси X и числовой переменной на оси Y.

Для оси x, учитывая, что точек данных много, форматирование текста по умолчанию приводит к тому, что метка для каждой метки перекрывается с другими метками. Как (а) изменить размер шрифта для текста моей оси и (б) изменить ориентацию текста так, чтобы текст был перпендикулярен оси?

Anjan
источник
И еще один stackoverflow.com/q/8097642/1172302
Никос Александрис
Есть совпадение со 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.
Артем Соколов
Правда! Исправлено согласно комментарию Артема, но я не обновил изображение.
Дрю Стин
68

Так же @ Дрю Стин об использовании 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))
meduvigo
источник
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()
JJ для прозрачности и Моники
источник
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())

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

user131476
источник
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))

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

HBat
источник