2013-06-30 13 views
6

Ich habe eine einfache Handlung:R wissenschaftliche Notation in Plots

#!/usr/bin/Rscript                      

png('plot.png') 

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

plot(x,y) 
dev.off() 

R verwendet 500, 1000, 1500, usw. für die Y-Achse. Gibt es eine Möglichkeit, wissenschaftliche Notation für die y Achse zu verwenden und * 10^3 auf die Spitze der Achse wie die Abbildung unten setzen?

enter image description here

Antwort

3

Dies ist eine Art von Hacky Art und Weise, aber es gibt nichts falsch mit ihm.

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

Dank. Es wäre besser, Ausdrücke zu verwenden http://stackoverflow.com/questions/4302367/concatenate-strings-and-expressions-in-a-plots-title – Yang

2

Wie Sie die Etiketten erhalten auf Ihre Achse auf dem verwendeten Zeichensystems abhängt (Basis, ggplot2 oder Gitter) Sie Funktionen aus scales Paket verwenden können Ihre Achsnummern zu formatieren:

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" 

Hier ist ein Beispiel ggplot2 mit:

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 Die OP hat einen besonderen Bedarf. Hier einige Ideen, die ich hier verwendet, um dies zu erreichen:

  1. Sie Ihre Plotkennungen axis Funktion anpassen können.
  2. Verwenden mtext, um Text in der äußeren Plotregion zu setzen
  3. Verwenden Ausdruck aus den plotmath Funktionen ...

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

Ich vermute, Sie missverstanden meine Frage; Ich möchte 1, 2, 3, 4 mit y-Achse und e + 06 oben auf der y-Achse. – Yang

+0

Aber danke für Ihre Informationen. – Yang

+0

Nein, ich verstehe Ihr Bedürfnis vollkommen. Meine Antwort war allgemein, Sie einzuladen, R plots Eigenschaften zu entdecken und nicht zu versuchen, einige MATLAB Eigenschaften zu reproduzieren. Viele Standard-R-Parameter sind optimiert, um die Informationen aus einem Plot einfach zu extrahieren. zB indem man die 10^3 anlegt, macht die Handlung schwieriger zu verstehen, wir müssen jedes Mal neu skalieren, wenn wir einem Punkt folgen ... – agstudy

9

Eine ähnliche Technik profitieren eaxis zu verwenden ist (extended/Engineering-Achse) aus dem sfsmisc Paket.

Es funktioniert wie folgt:

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

Verwandte Themen