2012-01-18 30 views
13

Tengo un gráfico que tiene $ -machos y fechas en los ejes yy respectivamente. Actualmente, las cantidades en dólares oscilan entre $ 0-15 millones. Algo como esto:R cambio de formato de escala en el eje y

x <- rnorm(20)^2 * 1000000 
plot(x) 

R hace cosas por el estilo en lugar de '1.0e+07''10,000,000' y también orienta el texto verticalmente en lugar de horizontalmente.

Mis preguntas son:

1) ¿Cómo puedo obtener el texto escala para ser orientado horizontalmente?

2) ¿cómo podría obtener R para usar 10MM en lugar de '10,000,000' o '1.0e+07'?

Respuesta

25

1) Véase la opción scipen en ?options que es una sanción contra el uso de la notación científica. Para un mejor control, debe trazar el eje a mano con las etiquetas que desee.

2) Ver las en ?par que controla la orientación crudamente de las etiquetas del eje.

Para 1):

x <- rnorm(20)^2 * 10000000 
layout(matrix(1:2, ncol = 2)) 
plot(x) 
getOption("scipen") 
opt <- options("scipen" = 20) 
getOption("scipen") 
plot(x) 
options(opt) 
layout(1) 

lo que da

enter image description here

para trazar su propio eje de tratar

plot(x/10000000, axes = FALSE) 
axis(1) 
pts <- pretty(x/10000000) 
axis(2, at = pts, labels = paste(pts, "MM", sep = "")) 
box() 

cual da

enter image description here

Donde usamos pretty() para seleccionar lugares bonitos para los ticks como R y luego agregamos un eje personalizado. Observe cómo suprimimos el dibujo del eje en la llamada plot() y luego agreguemos los ejes y el marco del trazado con las llamadas a axis() y box().

Para 2) combinar con 1)

opt <- options("scipen" = 20) 
op <- par(mar = c(5,7,4,2) + 0.1) ## extra margin to accommodate tick labs 
x <- rnorm(20)^2 * 10000000 
plot(x, las = 1, ylab = "")  ## no y-axis label 
title(ylab = "label", line = 5.5) ## need to plot the axis label 
par(op) 
options(opt) 

cual da

enter image description here

Aviso cómo usamos las en la llamada plot(), y tenemos que crear un poco de espacio de margen extra para acomodar las etiquetas de tic. También debemos trazar la etiqueta a mano, de lo contrario, R la colocará entre las etiquetas.

Para las etiquetas de los ejes de encargo, añadir el las = 1 a la llamada axis():

op <- par(mar = c(5,5,4,2) + 0.1) 
plot(x/10000000, axes = FALSE, ylab = "") 
axis(1) 
pts <- pretty(x/10000000) 
axis(2, at = pts, labels = paste(pts, "MM", sep = ""), las = 1) 
title(ylab = "my label", line = 4) 
box() 
par(op) 

que produce

enter image description here

11

Use axis con etiquetas personalizadas. Primero, divida sus datos por 1 millón. Y a continuación, cree una serie con la notación MM utilizando paste()

y <-rnorm(20)^2 * 1000000 /1000000 
x <-11:30 

plot(x,y, yaxt="n") 
my.axis <-paste(axTicks(2),"MM",sep="") 
axis(2,at=axTicks(2), labels=my.axis) 

El texto es ahora horizontal. Pero si se encuentra con un problema de uso, las = 1 para obligar a las etiquetas a ser horizontales.

axis(2,at=axTicks(2), labels=my.axis, las=1) 

enter image description here

+0

+1 especialmente para 'axTicks()'! –

Cuestiones relacionadas