[R] Scientific notation in plots

Leif Kirschenbaum leif at reflectivity.com
Tue Jan 17 17:50:39 CET 2006


You could also write your numbers using SI suffixes.
Below is a function I use for this purpose.
The option "near" allows you to require that numbers between 0.001 and 1000 are written as decimal; i.e. "0.010" appears as "0.010" instead of "10.0m".

##
## num2SI converts numbers to SI suffixed numbers
##
num2SI<-function(num,digits=4,near=TRUE){
  power<-signif(log10(abs(num)),digits=6)
  power3=floor(power/3); power3[!is.finite(power3)]=0
  powers=c("y","z","a","f","p","n","u","m","","k","M","G","T","P")
  powerstr=powers[power3+9]
  newnum=signif(num/10^(power3*3),digits=digits)
  newnum[is.nan(newnum)]=0
  numstr=(paste(newnum,powerstr,sep=""))
  nearidx=near & (abs(num)>0.001) & (abs(num)<1000)
  nearidx[is.na(nearidx)]=FALSE
  if(sum(nearidx)) numstr[nearidx]=sprintf("%.*f",pmax(1,(digits-floor(power[nearidx])-1),na.rm=TRUE),num[nearidx])
  numstr[!is.finite(num)] = paste(num[!is.finite(num)])
 return(numstr)
}

Leif Kirschenbaum
Senior Yield Engineer
Reflectivity, Inc.
(408) 737-8100 x307
leif at reflectivity.com 

> Message: 6
> Date: Fri, 13 Jan 2006 12:49:54 +0100 (CET)
> From: Oddmund Nordg??rd <nood at ext.sir.no>
> Subject: [R] Scientific notation in plots
> To: r-help at stat.math.ethz.ch
> Message-ID: <Pine.LNX.4.56.0601131247300.25418 at dna.sir.no>
> Content-Type: TEXT/PLAIN;	charset=ISO-8859-1
> 
> 
> Is it possible to use scientific notation of numbers on the 
> axis of plots
> without using the xEy notation. That means: a beatiful 1x10^3 
> instead of 1E3.
> Logarithmic scale, in my case.
> 
> Thank you very much!
> 
> Oddmund
> 
> ******************************************
> 
>   Oddmund Nordg?rd
> 
>   Department of Haematology and Oncology
>   Stavanger University Hospital
>   P.O. Box 8100
>   4068 STAVANGER
>   Phone: 51 51 89 34
>   Email: nood at ext.sir.no




More information about the R-help mailing list