2009-09-08 23 views
5

Estoy intentando que las etiquetas del eje x se dividan en dos líneas. También me gustaría rotar las etiquetas 45 grados. ¿Cómo puedo hacer esto?¿Es posible dividir las etiquetas de eje en 2 líneas en gráficos base?

Lo que tengo hasta ahora:

N <- 10 
dnow <- data.frame(x=1:N, y=runif(N), labels=paste("This is observation ",1:N)) 
with(dnow, plot(x,y, xaxt="n", xlab="")) 
atn <- seq(1,N,3) 
axis(1, at=atn, labels=labels[atn]) 
+0

¿Qué quiere decir 2 líneas? ¿Quieres decir que quieres "Esto es \ n observación ..."? –

+0

@chis_dubois ¡Esa es la primera parte de la respuesta! ¡Gracias! –

Respuesta

12

Aquí es una posibilidad con el paquete ggplot2.

N <- 10 
labs <- factor(1:N,labels=paste("This is \n observation",1:N)) 
dnow <- data.frame(x=1:N, y=runif(N), labels=labs) 
qplot(labels,y,data=dnow) + 
     opts(axis.text.x=theme_text(angle=-45,hjust=0)) 

alt text http://i28.tinypic.com/k024p3.png

Estoy deseando ver los ejemplos del paquete base, también!

+0

@chris - Me gustaría aceptar su pregunta (todos los chicos guays usan ggplot2 en estos días). Pero, ¿podría arreglar el eje x antes de la mano? (Ggplot ordena vectores de caracteres alfabéticamente, por lo que tiene que convertirlo en un factor.) ¡Gracias! –

+0

Buena sugerencia. Lo cambié para ser un factor, pero el lado derecho aún se está cortando. Voy a tratar de arreglar eso. –

+0

esto también funciona para etiquetas de datos: si suelta \ n en ellas, ¡romperá líneas! – Andrew

4

Esto es lo que cociné (ante mis ggplot2 días) el uso de gráficos de base:

## data 
N <- 10 
dnow <- data.frame(x=1:N, y=runif(N), labels=paste("This is \nobservation ",1:N)) 
## make margins wide 
par(mfrow=c(1,1), mar=c(10,10,6,4)) 
## plot without axix labels or ticks 
with(dnow, plot(x,y, xaxt="n", xlab="")) 
## the positions we ant to plot 
atn <- seq(1,N,3) 
## the label for these positions 
lab <- dnow$labels[atn] 
## plot the axis, but do not plot labels 
axis(1, at=atn, labels=FALSE) 
## plot labels 
text(atn, ## x position 
    par("usr")[3]-.05, ## position of the low axis 
    srt=45, ## angle 
    labels=lab, ##labels 
    xpd=TRUE, ## allows plotting outside the region 
    pos=2) 
## par("usr")[3] 
+0

Creo que esto también es una contribución importante. Con 'ggplot2' probablemente esto no sea necesario. Pero es bueno tener también. También se ofrece una solución mejor y más elegante con 'grid 'en el libro de R Graphics de Paul Murrel. – Sam

Cuestiones relacionadas