Alterando o tamanho da fonte e a direção do texto dos eixos no ggplot2

188

Estou plotando um gráfico com uma variável categórica no eixo x e uma variável numérica no eixo y.

Para o eixo x, como existem muitos pontos de dados, a formatação padrão do texto faz com que o rótulo de cada marca de seleção se sobreponha a outros rótulos. Como (a) altero o tamanho da fonte do texto do meu eixo e (b) altero a orientação do texto para que o texto fique perpendicular ao eixo?

Anjan
fonte
E outro stackoverflow.com/q/8097642/1172302 #
Nikos Alexandris
Há sobreposição com stackoverflow.com/q/1330989/946850 , mas essa pergunta não cobre o redimensionamento do texto.
krlmlr

Respostas:

292

Use 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

insira a descrição da imagem aqui

Há muitas informações boas sobre como formatar seus ggplots aqui . Você pode ver uma lista completa de parâmetros que você pode modificar (basicamente todos eles) usando ?theme.

Drew Steen
fonte
2
Eu acho que deveria ser hjust=1.
Artem Sokolov
Verdade! Corrigido pelo comentário de Artem, mas não atualizei a imagem.
Tirou Steen
67

Ditto @Drew Steen sobre o uso de theme(). Aqui estão os atributos comuns do tema para o texto e os títulos do eixo.

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"))
metasequoia
fonte
19

Use o tema ():

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
fonte
19

Adicionando soluções anteriores, você também pode especificar o tamanho da fonte relativo ao base_sizeincluído nos temas, como theme_bw()(onde base_sizeé 11) usando orel() função

Por exemplo:

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

Ao fazer muitos gráficos, faz sentido configurá-lo globalmente (parte relevante é a segunda linha, três linhas juntas são um exemplo de trabalho):

   library('ggplot2')
   theme_update(text = element_text(size=20))
   ggplot(mpg, aes(displ, hwy, colour = class)) + geom_point()
JJ pela Transparência e Monica
fonte
4

O uso do atributo "fill" ajuda em casos como este. Você pode remover o texto do eixo usando element_blank()e mostrar o gráfico de barras multicoloridas com uma legenda. Estou plotando uma frequência de remoção de peças em uma oficina como abaixo

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

Eu optei por essa solução no meu caso, pois tinha muitas barras no gráfico de barras e não consegui encontrar um tamanho de fonte adequado, que fosse legível e pequeno o suficiente para não se sobrepor.

user131476
fonte
0

Outra maneira de lidar com etiquetas sobrepostas é usando 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()

insira a descrição da imagem aqui

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

insira a descrição da imagem aqui

HBat
fonte