2011-12-31 18 views
10

Al agregar manualmente las siguientes etiquetas con (axis(1, at=1:27, labels=labs[0:27])):R establecida Todas las etiquetas de los ejes (a prevenir algunos de ser omitidos)

> labs[0:27] 
[1] "0\n9.3%" "1\n7.6%" "2\n5.6%" "3\n5.1%" "4\n5.7%" "5\n6.5%" "6\n7.3%" "7\n7.6%" "8\n7.5%" "9\n7%" "10\n6.2%" "11\n5.2%" 
[13] "12\n4.2%" ........ 

me sale el siguiente:

enter image description here

Cómo hacer Obligo a que se dibujen todas las etiquetas, por lo que no se saltan 1,3,5,6 ni 11. (También, para el crédito adicional, ¿cómo puedo cambiar de puesto todo el asunto de unos pocos píxeles?)

+0

¿Realmente desea incluir 0 en su indexación? –

Respuesta

10

eje te dice que:?

El código se esfuerza para no llamar la superposición de etiquetas señalizadoras, y también lo hará omita las etiquetas donde colindan o se superponen las etiquetas dibujadas previamente. Esto puede dar como resultado, por ejemplo, cada otra marca que se etiquete. (Las garrapatas se dibujan izquierda a derecha o de abajo hacia arriba, y el espacio, al menos, se deja el tamaño de un 'm' entre las etiquetas.)

Juego con cex.axis de modo que las etiquetas son lo suficientemente pequeño como para caber sin superposición

labs <-c("0\n9.3%","1\n7.6%","2\n5.6%","3\n5.1%","4\n5.7%","5\n6.5%","6\n7.3%", 
     "7\n7.6%","8\n7.5%","9\n7%", "10\n6.2%","11\n5.2%","12\n4.2%",12:27) 
plot(1:27,xaxt = "n") 
axis(side=1, at=1:27, labels=labs[0:27],cex.axis=0.35) 

Si amplía su gráfica (manualmente arrastrando o programáticamente), puede aumentar el tamaño de sus etiquetas.

+0

Muchas gracias. cex.axis ayudó mucho –

2

@PLapointe acaba de publicar lo que iba a decir, pero omitió la respuesta de bonificación.

Establecer padj = 0.5 en axis para mover las etiquetas ligeramente hacia abajo.

+2

Otra alternativa es hacer las etiquetas perpendiculares con '' 'plot (..., las = 2)' '' o '' 'par (las = 2); plot (...) '' ' – lukmdo

+0

+1 para la solución anterior de rotación de ejes. Una nota sobre lo anterior, en caso de que esté usando 'plot (..., axis = FALSE, ...)' y 'axis (1, ....)', luego agregue la opción al eje: 'axis (1, ..., las = 2) ' – r3x

14

Si realmente quiere forzar todas las etiquetas para mostrar, incluso cuando están muy cerca o que se superponen, se puede "engañar" R en mostrarlos mediante la adición de etiquetas de pares e impares ejes con comandos separados, de la siguiente manera:

labs <-c("0\n9.3%","1\n7.6%","2\n5.6%","3\n5.1%","4\n5.7%","5\n6.5%","6\n7.3%", 
     "7\n7.6%","8\n7.5%","9\n7%", "10\n6.2%","11\n5.2%","12\n4.2%",13:27) 
n=length(labs) 
plot(1:28, xaxt = "n") 
axis(side=1, at=seq(1,n,2), labels=labs[seq(1,n,2)], cex.axis=0.6) 
axis(side=1, at=seq(2,n,2), labels=labs[seq(2,n,2)], cex.axis=0.6) 

enter image description here

se puede jugar con cex.axis para obtener el tamaño de texto que desea. Tenga en cuenta también que es posible que tenga que ajustar el número de valores en at= y/o labels= para que sean iguales.

Estoy de acuerdo con @PLapointe y @joran en que generalmente es mejor no alterar el comportamiento predeterminado de R con respecto a la superposición. Sin embargo, he tenido algunos casos en los que las etiquetas de los ejes se veían bien incluso cuando no estaban completamente separadas por "m-ancho", y acerté con el truco de alternar etiquetas impares y pares como una forma de obtener el comportamiento I querido.

3

Aunque hay algunas buenas respuestas aquí, el OP no quiso cambiar el tamaño de las etiquetas o cambiar nada sobre la trama además de ajustar todas las etiquetas de ejes. Es molesto, ya que a menudo parece haber suficiente espacio para todas las etiquetas de los ejes.

Aquí hay otra solución. Dibuja la trama sin el eje, luego agrega marcas con etiquetas vacías. Almacene las posiciones de los tics en un objeto, de modo que pueda examinar cada uno y colocarlo en la posición correcta en el eje.

plot(1:10, 1:10, yaxt = "n") axis_ticks = axis(2, axTicks(2), labels = rep("", length(axTicks(2)))) for(i in axis_ticks) axis(2, i)

0

tuve un problema similar donde quería escalonar las etiquetas y hacer que se impriman sin perder algunos. Creé dos conjuntos de ticks que muestran el segundo conjunto debajo del otro para que parezca que se tambalea.

xaxis_stagger = function(positions,labels) { 
    odd=labels[seq(1,length(labels),2)] 
    odd_pos=positions[seq(1,length(positions),2)] 
    even=labels[seq(2,length(labels),2)] 
    even_pos=positions[seq(2,length(positions),2)] 
    axis(side=1,at=odd_pos,labels=odd) 
    axis(side=1,at=even_pos,labels=even,padj=1.5) 
} 

Así que le dan las posiciones en las que desea que las garrapatas están y las etiquetas para esas garrapatas y esto, entonces sería volver a organizarla en dos conjuntos de eje y la trama de ellos en la trama original. La trama original se haría con xaxt = "n".

Cuestiones relacionadas