[R] Histograms on a log scale
Richard.Cotton at hsl.gov.uk
Richard.Cotton at hsl.gov.uk
Mon Jul 20 12:00:04 CEST 2009
> I would like to be able to plot histograms/densities on a semi-log or
> log-log scale.
> # Get a random log-normal distribution
> r <- rlnorm(1000)
>
> # Get the distribution without plotting it using tighter breaks
> h <- hist(r, plot=F, breaks=c(seq(0,max(r)+1, .1)))
>
> # Plot the distribution using log scale on both axes, and use
> # blue points
> plot(h$counts, log="xy", pch=20, col="blue",
> main="Log-normal distribution",
> xlab="Value", ylab="Frequency")
>
> This is very close to what I need, but how can I have filled rectangles
> in the plot, so that it looks more like a traditional histogram?
You can use type="h" to specify histogram-like plotting. You probably
also want to use a linear y-scale to make frequencies easier to compare.
Change the last line to:
plot(h$mids, h$counts, log="x", pch=20, col="blue",
main="Log-normal distribution",
xlab="Value", ylab="Frequency", type="h")
Alternatively, plot a histogram of the log data, and draw your own axes:
logr <- log(r)
par(las=2)
h2 <- hist(logr, axes=FALSE, breaks=seq(min(logr)-1, max(logr)+1, .5))
Axis(side=2)
Axis(side=1, at=h2$mids, labels=format(exp(h2$mids), digits=1), lty=NULL)
Or, even better, install the ggplot2 package and try something like:
qplot(r, geom="histogram") + scale_x_continuous(trans="log10")
Regards,
Richie.
Mathematical Sciences Unit
HSL
------------------------------------------------------------------------
ATTENTION:
This message contains privileged and confidential inform...{{dropped:22}}
More information about the R-help
mailing list