Cambiar el tamaño de fuente y la dirección del texto de los ejes en ggplot2

188

Estoy trazando un gráfico con una variable categórica en el eje xy una variable numérica en el eje y.

Para el eje x, dado que hay muchos puntos de datos, el formato de texto predeterminado hace que la etiqueta de cada marca se superponga con otras etiquetas. ¿Cómo (a) cambio el tamaño de fuente para el texto de mi eje y (b) cambio la orientación del texto para que el texto sea perpendicular al eje?

Anjan
fuente
Y otro stackoverflow.com/q/8097642/1172302
Nikos Alexandris el
Hay superposición con stackoverflow.com/q/1330989/946850 , pero esa pregunta no cubre cambiar el tamaño del texto.
krlmlr

Respuestas:

292

Uso 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

ingrese la descripción de la imagen aquí

Hay un montón de buena información sobre cómo dar formato a los ggplots aquí . Puede ver una lista completa de parámetros que puede modificar (básicamente, todos) usando ?theme.

Drew Steen
fuente
2
Creo que debería serlo hjust=1.
Artem Sokolov
¡Cierto! Corregido por el comentario de Artem, pero no actualicé la imagen.
Drew Steen el
68

Ditto @Drew Steen sobre el uso de theme(). Aquí hay atributos de tema comunes para el texto del eje y los títulos.

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

Usar 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
fuente
19

Además de las soluciones anteriores, también puede especificar el tamaño de fuente en relación con el base_sizeincluido en los temas, como theme_bw()(donde base_sizees 11) utilizando la rel()función.

Por ejemplo:

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

Al hacer muchas parcelas, tiene sentido establecerlo globalmente (la parte relevante es la segunda línea, tres líneas juntas son un ejemplo de trabajo):

   library('ggplot2')
   theme_update(text = element_text(size=20))
   ggplot(mpg, aes(displ, hwy, colour = class)) + geom_point()
JJ para Transparencia y Monica
fuente
4

El uso del atributo "fill" ayuda en casos como este. Puede eliminar el texto del eje usando element_blank()y mostrar un gráfico de barras de varios colores con una leyenda. Estoy trazando una frecuencia de extracción de piezas en un taller de reparación como a continuación

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

En mi caso, busqué esta solución, ya que tenía muchas barras en el gráfico de barras y no pude encontrar un tamaño de fuente adecuado que fuera legible y lo suficientemente pequeño como para no superponerse.

usuario131476
fuente
0

Otra forma de lidiar con etiquetas superpuestas es mediante el uso 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()

ingrese la descripción de la imagen aquí

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

ingrese la descripción de la imagen aquí

HBat
fuente