Re: [R] Overlying a Normal Dist in a Barplot

From: Gabor Grothendieck <ggrothendieck_at_gmail.com>
Date: Sat 09 Jul 2005 - 11:58:02 EST

On 7/8/05, Bret Collier <bret@tamu.edu> wrote:
> R-Users,
> Hopefully someone can shed some light on these questions as I had
> little luck searching the archives (although I probably missed something
> in my search due to the search phrase). I estimated multinomial
> probabilities for some count data (number successful offspring) ranging
> from 0 to 8 (9 possible response categories). I constructed a barplot
> (using barplot2) and I want to "overlay" a normal distribution on the
> figure (using rnorm (1000, mean, sd)). My intent is to show that using
> a mean(and associated sd) estimated from discrete count data may not be
> a valid representation of the distribution of successful offspring.
>
> Obviously the x and y axes (as structured in barplot2) will not be
> equivalent for these 2 sets of information and this shows up in my
> example below.
>
> 1) Is it possible to somehow reconcile the underlying x-axis to the
> same scale as would be needed to overly the normal distribution (e.g.
> where 2.5 would fall on the normal density, I could relate it to 2.5 on
> the barplot)? Then, using axis (side=4) I assume I could insert a
> y-axis for the normal distribution.
>
> 2) Is lines(density(x)) the appropriate way to insert a normal
> distribution into this type of figure? Should I use 'curve'?
>
> If someone could point me in the right direction, I would appreciate
> it.
>
> TIA, Bret
>
> Example:
>
> testdata
> 0 0.196454948
> 1 0.063515510
> 2 0.149187592
> 3 0.237813885
> 4 0.282127031
> 5 0.066469719
> 6 0.001477105
> 7 0.001477105
> 8 0.001477105
>
>
> x<-rnorm(1000, 2.84, 1.57)
> barplot2(testdata, xlab="Fledgling Number",
> ylab="Probability", ylim=c(0, 1), col="black",
> border="black", axis.lty=1)
> lines(density(x))
>

Maybe something like this using rect and curve:

# data from your post
testdata <- c(0.196454948, 0.06351551, 0.149187592, 0.237813885,   0.282127031, 0.066469719, 0.001477105, 0.001477105, 0.001477105) x <- 0:9

# setup plot ranges noting max of normal density is at mean xrange <- range(x) + c(-0.5,+0.5)
yrange <- range(c(testdata, dnorm(2.84, 2.84, 1.57), 0)) plot(xrange, yrange, type = "n", xlab = "X", ylab = "Probability", xaxt = "n") axis(1, x)

# draw bars using rect and density using curve rect(x - 0.5, 0, x + 0.5, testdata, col = "lightgrey") curve(dnorm(x, 2.84, 1.57), min(xrange), max(xrange), add = TRUE)



R-help@stat.math.ethz.ch mailing list
https://stat.ethz.ch/mailman/listinfo/r-help PLEASE do read the posting guide! http://www.R-project.org/posting-guide.html Received on Sat Jul 09 12:02:58 2005

This archive was generated by hypermail 2.1.8 : Fri 03 Mar 2006 - 03:33:26 EST