2012-01-18 12 views
13

Ho un grafico che ha $ -ammessi e le date rispettivamente sull'asse ye sull'asse x. Attualmente gli importi in dollari vanno da $ 0-15 milioni. Qualcosa di simile a questo:R modifica del formato della scala sull'asse Y

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

R fa cose del genere '1.0e+07' invece di '10,000,000' e orienta anche il testo in verticale invece che in orizzontale.

Le mie domande sono:

1) come faccio a ottenere il testo criterio di ripartizione da orizzontale orientato?

2) come si ottiene R per utilizzare 10MM anziché '10,000,000' o '1.0e+07'?

risposta

25

1) Si veda l'opzione scipen in ?options, che è una pena contro l'uso di notazione scientifica. Per un controllo migliore, è necessario tracciare manualmente l'asse con le etichette desiderate.

2) Vedere las in ?par che controlla l'orientamento rozzamente delle etichette degli assi.

Per 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) 

che dà

enter image description here

per tracciare il proprio asse di provare

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

che dà

enter image description here

Dove usiamo pretty() per selezionare le posizioni graziose per i segni di graduazione proprio come farebbe R e quindi aggiungere un asse personalizzato. Nota come sopprimiamo il disegno degli assi nella chiamata plot() e poi riaggiungi gli assi e la trama con le chiamate a axis() e box().

Per 2) che unisce 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) 

che dà

enter image description here

Avviso come utilizziamo las nella chiamata plot(), e abbiamo bisogno di creare uno spazio margine extra per ospitare le etichette di graduazione. Abbiamo anche bisogno di tracciare l'etichetta a mano altrimenti R la inserirà tra le etichette di graduazione.

Per le etichette degli assi personalizzato, aggiungere il las = 1 alla chiamata 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) 

che produce

enter image description here

11

Utilizzare axis con etichette personalizzate. In primo luogo, dividi i tuoi dati di 1 milione. Quindi creare una serie con la notazione MM utilizzando 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) 

Il testo ora è orizzontale. Ma se ti imbatti in un problema, las = 1 per forzare le etichette ad essere orizzontali.

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

enter image description here

+0

+1 soprattutto per 'axTicks()'! –

Problemi correlati