2010-11-08 12 views
15

Estoy creando un histograma en R que muestra la frecuencia de varios eventos en un vector. Cada evento está representado por un número entero en el rango [1, 9]. Estoy mostrando la etiqueta para cada recuento verticalmente debajo del gráfico. Aquí está el código:¿Cómo puedo hacer que mis etiquetas verticales quepan dentro de mi ventana de trazado?

hist(vector, axes = FALSE, breaks = chartBreaks) 
axis(1, at = tickMarks, labels = eventTypes, las = 2, tick = FALSE) 

Por desgracia, las etiquetas son demasiado largos, por lo que son cortados por la parte inferior de la ventana. ¿Cómo puedo hacer que sean visibles? ¿Estoy usando el gráfico correcto?

Respuesta

8

Esto no suena como un trabajo para un histograma: el evento no es una variable continua. Un diagrama de barras o una gráfica de puntos puede ser más adecuado.

Algunos datos ficticios

set.seed(123) 
vec <- sample(1:9, 100, replace = TRUE) 
vec <- factor(vec, labels = paste("My long event name", 1:9)) 

Un barplot se produce a través de la función barplot() - Ofrecemos que los cargos de cada evento utilizando la función table() por conveniencia. Aquí tenemos que girar etiquetas utilizando las = 2 y crear un espacio extra de las etiquetas en el margen

## lots of extra space in the margin for side 1 
op <- par(mar = c(10,4,4,2) + 0.1) 
barplot(table(vec), las = 2) 
par(op) ## reset 

Un diagrama de puntos se produce a través de la función dotchart() y tiene la ventaja añadida de la clasificación de los márgenes de la trama para nosotros

dotchart(table(vec)) 

La gráfica de puntos tiene la ventaja sobre la barra de barras de utilizar mucha menos tinta para mostrar la misma información y se centra en las diferencias en los recuentos entre los grupos en lugar de las magnitudes de los recuentos.

Observe cómo he configurado los datos como un factor. Esto nos permite almacenar las etiquetas de eventos como etiquetas para el factor, automatizando así el etiquetado de los ejes en los gráficos. También es una forma natural de almacenar datos como entiendo que tienes.

+0

Si uno estuviera utilizando hist() la forma de disminuir el tamaño de las etiquetas sería con cex.axis. Parece que Barplot usa el mismo parámetro de trazado, pero después de probar esa respuesta aparece en cambio ser cex.names dado que las etiquetas "numéricas" parecen tratarse de manera diferente a "carácter" en barra de coordenadas(). –

+0

Las etiquetas de barra y las etiquetas de eje de recuento se dibujan en dos llamadas separadas a 'axis()'. 'cex.axis' cuando se establece en una llamada externa a' par() 'cambiará ambas etiquetas porque' cex.axis' y 'cex.name' toman' par ("cex.axis") 'como su valor predeterminado. Si suministra 'cex.axis' a la llamada' barplot() ', no ha cambiado' par ("cex.axis") ', y por lo tanto las etiquetas no cambian de tamaño.En 'hist()', está dibujando dos ejes numéricos, dibujados al mismo tiempo, por lo que ambos se ven afectados por 'cex.axis'. –

9

Mire help(par), en los campos particulares mar (para el margen) y oma (para el margen exterior). Puede ser tan simple como

par(mar=c(5,3,1,1)) # extra large bottom margin 
hist(vector, axes = FALSE, breaks = chartBreaks) 
axis(1, at = tickMarks, labels = eventTypes, las = 2, tick = FALSE) 
+0

Sé que hay una explicación fácil para esto, pero no importa lo que hago con mar, OMA, o omi, nada cambia. Intenté configurarlo con par() y pasarlo a hist(); no dados. –

+4

try 'par (mar = c (9,4,4,2) + 0.1)' --- el margen predeterminado en el lado 1 es 5, por lo que el ejemplo de Dirk no está creando nada más grande que lo normal para el lado 1 --- está haciendo que los lados -4 sean más pequeños de lo normal. Solo puede configurar 'mar',' oma', etc. a través de una llamada a 'par()'. –

0

añadiendo Quizás \ n en las etiquetas para que se envuelva en 2 líneas? No es óptimo, pero puede funcionar.

0

Es posible que desee ver en este post de validación cruzada

Cuestiones relacionadas