John Kane wrote:
How about using the ggplot2 package? Does this give you something along the lines of what you want? =======================================================================
library(ggplot2)
r <- data.frame(rlnorm(1000))
names(r) <- "rr"

ggplot(r, aes(rr)) + geom_histogram()+ scale_x_log10() + scale_y_log10()

=========================================================================

--- On Mon, 7/20/09, Lorenzo Isella <lorenzo.ise...@gmail.com> wrote:

From: Lorenzo Isella <lorenzo.ise...@gmail.com>
Subject: [R] Histograms on a log scale
To: r-help@r-project.org
Received: Monday, July 20, 2009, 5:17 AM
Dear All,
I would like to be able to plot histograms/densities on a
semi-log or log-log scale.
I found several suggestions online

http://tolstoy.newcastle.edu.au/R/help/05/09/12044.html
https://stat.ethz.ch/pipermail/r-help/2002-June/022295.html
http://www.harding.edu/fmccown/R/#histograms

Now, consider the code snippet taken from 
http://www.harding.edu/fmccown/R/#histograms

# 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?
Kind Regards

Lorenzo

______________________________________________
R-help@r-project.org
mailing list
https://stat.ethz.ch/mailman/listinfo/r-help
PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
and provide commented, minimal, self-contained,
reproducible code.



      __________________________________________________________________
The new Internet Explorer® 8 - Faster, safer, easier.  Optimized for Yahoo!  
Get it Now for Free! at http://downloads.yahoo.com/ca/internetexplorer/
Hello,
And thanks for answering.
Well, I think I found what I wanted (maybe in a cumbersome way). ggplot2 can probably do the same and a lot more, but perhaps it is like using a cannon to kill a bird.
See the code snippet at the end of the email.
Kind Regards

Lorenzo


rm(list=ls())

set.seed(1234)

my_seq <- rlnorm(1000)

log_binning <- function(x_min,x_max,n_breaks=10){
delta_log <- log(x_max/x_min)/(n_breaks-1)
my_seq<-seq(0,n_breaks-1)
log_breaks <- x_min*exp(my_seq*delta_log)
}

freq <- table(my_seq)

n_bins <- 20

my_breaks2 <- log_binning(min(my_seq), max(my_seq), n_bins) #this creates a log-spaced bin structure h2 <- hist(my_seq, plot=F, my_breaks2) #this creates a histogram but does not plot it.

pdf("histogram_lognormal.pdf")
par( mar = c(4.5,5, 2, 1) + 0.1)
i <- seq(1,(length(h2$breaks)-1)) #this counts the rectangles I am about to generate

plot(h2$mids, h2$counts, col="blue",ylab="Frequency", log="x",
    ,cex.axis=1.4,cex.lab=1.6, xlab="Value of Random Number", main="")
rect(h2$breaks[i], 0, h2$breaks[i+1],h2$count )#this generates a set of rectangles which are useful to visualize the underlying
#bin structure
dev.off()

______________________________________________
R-help@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-help
PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
and provide commented, minimal, self-contained, reproducible code.

Reply via email to