[R] two histograms in the same graph

Peter Dalgaard P.Dalgaard at biostat.ku.dk
Thu Jan 24 21:06:01 CET 2008

Duncan Murdoch wrote:
> On 1/24/2008 9:43 AM, Juan Pablo Fededa wrote:
>> Dear Contributors:
>> I have two vectors x and z, and I want to display the histograms of both
>> vectors in the same graph, x in red bars, z in blue bars.
>> If you have any clue on how to do that, I will be very glad to hear it!!!!!!
> It's hard to design a graph like this that looks good, but it's easy to 
> draw using add=TRUE:
> x <- rnorm(1000)
> y <- rnorm(1000, mean=1)
> breaks <- pretty(range(c(x,y)), 20)
> hist(x, breaks=breaks, col='red', main="Hist of x and y")
> hist(y, breaks=breaks, add=TRUE, border='blue')
> Duncan Murdoch
This is where frequency polygons can be useful. The basically just play
connect-the-dots with the bar tops of the histogram, but since they are
transparent, they are more easily overplotted. They are quite a long way
towards density estimates, but retaining the feature of the histogram:
that it can be explained to the totally uninitiated, with no reference
to smoothing kernels and whatnot.

freqpoly <- function(x, ..., xlab=deparse(substitute(x)), add=FALSE,
    h <- hist(x, ..., plot=FALSE)
    nbin <- length(h$mids)
    minb <- h$breaks[1]
    maxb <- h$breaks[nbin+1]
    minm <- h$mid[1]
    maxm <- h$mid[nbin]
    xmin <- minb - (minm - minb)
    xmax <- maxb + (maxb - maxm)
    x <- c(xmin,h$mid,xmax)
    y <- c(0, if (freq) h$counts else h$density, 0)
    if (!add)
        plot(x, y, xlab=xlab, ylab= if (freq) "Frequency" else "Density",
             type="o", pch=16, ...)
        lines(x, y, type="o", pch=16, ...)
freqpoly(y,breaks=breaks, add=TRUE, col="red")

(This is a bit of a rough sketch because "..." gets sent to incompatible

   O__  ---- Peter Dalgaard             Øster Farimagsgade 5, Entr.B
  c/ /'_ --- Dept. of Biostatistics     PO Box 2099, 1014 Cph. K
 (*) \(*) -- University of Copenhagen   Denmark          Ph:  (+45) 35327918
~~~~~~~~~~ - (p.dalgaard at biostat.ku.dk)                  FAX: (+45) 35327907

More information about the R-help mailing list