# [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
> 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

```