2013-06-30 20 views
6

Ho una trama semplice:R notazione scientifica in trame

#!/usr/bin/Rscript                      

png('plot.png') 

y <- c(102, 258, 2314)                   
x <- c(482563, 922167, 4462665) 

plot(x,y) 
dev.off() 

R utilizza 500, 1000, 1500, ecc per l'asse y. C'è un modo per utilizzare la notazione scientifica per l'asse e inserire * 10^3 nella parte superiore dell'asse come nella figura seguente?

enter image description here

risposta

3

Questa è una sorta di un modo hacky, ma non c'è niente di sbagliato con esso:.

plot(x,y/1e3, ylab="y /10^3") 
+0

Grazie. Sarebbe meglio usare le espressioni http://stackoverflow.com/questions/4302367/concatenate-strings-and-expressions-in-a-plot-title – Yang

2

Come si ottiene le etichette sul vostro asse dipende dal sistema tracciato utilizzato (base, ggplot2 o lattice) È possibile utilizzare le funzioni da scales pacchetto per formattare i numeri degli assi:

library(scales) 
x <- 10^(1:10) 
scientific_format(1)(x) 
[1] "1e+01" "1e+02" "1e+03" "1e+04" "1e+05" "1e+06" "1e+07" "1e+08" "1e+09" "1e+10" 

Ecco un esempio utilizzando ggplot2:

library(ggplot2) 
dat <- data.frame(x = c(102, 258, 2314),                  
        y = c(482563, 922167, 4462665)) 

qplot(data=dat,x=x,y=y) + 
    scale_y_continuous(label=scientific_format(digits=1))+ 
    theme(axis.text.y =element_text(size=50)) 

enter image description here

EDIT Il PO ha una specifica esigenza. Ecco alcune idee che ho usato qui per realizzare questo:

  1. È possibile personalizzare le etichette di trama utilizzando la funzione axis.
  2. Usa mtext per mettere il testo nella regione trama esterna
  3. usare l'espressione di trarre profitto dalle caratteristiche plotmath ...

enter image description here

y <- c(102, 258, 2314)                   
x <- c(482563, 922167, 4462665) 
plot(x,y,ylab='',yaxt='n') 
mtext(expression(10^3),adj=0,padj=-1,outer=FALSE) 
axis(side=2,at=y,labels=round(y/1000,2)) 
+0

Immagino che tu abbia frainteso la mia domanda; Voglio 1, 2, 3, 4 con l'asse ye e + 06 per essere in cima all'asse y. – Yang

+0

Ma grazie per l'informazione. – Yang

+0

No Capisco perfettamente il tuo bisogno. La mia risposta è stata generale per invitarvi a scoprire le caratteristiche dei grafici R e non a provare a riprodurre alcune caratteristiche di MATLAB. Molti parametri R predefiniti sono ottimizzati per estrarre facilmente le informazioni da un grafico. Ad esempio, ponendo il 10^3, rendiamo la trama più difficile da capire, siamo obbligati a ridimensionare ogni volta che seguiamo un punto ... – agstudy

9

Una tecnica simile è quella di utilizzare eaxis (esteso/asse tecnico) dal pacchetto sfsmisc.

funziona così:

library(sfsmisc) 

x <- c(482563, 922167, 4462665) 
y <- c(102, 258, 2314) 

plot(x, y, xaxt="n", yaxt="n") 

eaxis(1) # x-axis 
eaxis(2) # y-axis 

enter image description here

Problemi correlati