[R] Creating a histogram from a frequency vector - correction!
Stephen Ellison
S@E|||@on @end|ng |rom LGCGroup@com
Wed Oct 9 18:31:42 CEST 2019
Sorry; that was not the working version.
Should be
freqs <- c(11, 19, 5, 3, 2, 1, 0, 0, 2, 3, 2)
freqhist <- function(counts, xname=deparse(substitute(counts)), breaks=0:length(counts),
mids=(breaks[-1]+breaks[-length(breaks)])/2 , ...){
binwidths <- diff(breaks)
dens <- counts/(binwidths*sum(counts))
retval <- structure(list(breaks=breaks, counts=counts, density=dens,
mids=mids, xname=xname,
equidist=all(diff(breaks)==diff(breaks[1:2]) ) ),
class="histogram")
}
plot(freqhist(freqs, breaks=c(4*0:5, 10*3:5, 70, 100, 140)) )
#Also works equidistant with default 0:length(counts) breaks:
f2 <- c(30, 39, 31, 29, 10, 6, 3, 1, 0, 1)
plot(freqhist(f2))
Steve E
> -----Original Message-----
> From: Stephen Ellison
> Sent: 09 October 2019 17:29
> To: 'Nick Wray'; r-help using r-project.org
> Subject: RE: [R] Creating a histogram from a frequency vector
>
> > I have a vector like say 73,53,42,67,41,50 where these numbers are the
> > number of occurrences of the data values 1,2,3,4,5,6 - so in essence I have
> > the frequency bit from the hist() function. I can't see an elegant way
> (there
> > are clearly messy workarounds like generating a vector of 73 1's, 53 2's etc)
> of
> > creating a histogram from this data set. Is there one?
>
> hist() generates a histogram object that it then plots.
>
> You can use your frequency vector to generate the same kind of object and
> then just plot it, though you'll have to provide breaks (possibly defaulted, if
> they're just 0:length(frequencies) ) and you'd have to work on the density
> component a bit.
>
> I'm sure this is out there somewhere already, but here's as an example, using
> values pulled from a (nonequidistant) ?hist example and using a short off-
> the-cuff function to build the histogram object:
>
> freqs <- c(11, 19, 5, 3, 2, 1, 0, 0, 2, 3, 2) #islands
> brks <- c(4*0:5, 10*3:5, 70, 100, 140)
>
> freqhist <- function(counts, xname=deparse(substitute(frequencies)),
> breaks=0:length(frequencies),
> mids=(breaks[-1]+breaks[-length(breaks)])/2 , ...){
>
> binwidths <- diff(breaks) #This copes with unequal break intervals
> dens <- counts/(binwidths*sum(counts))
>
> retval <- structure(list(breaks=breaks, counts=counts,, density=dens,
> mids=mids, xname=xname, equidist=all(diff(breaks)==diff(breaks[1:2]) ),
> class="histogram")
> }
>
> plot(freqhist(freqs, breaks=brks))
>
> #Also works equidistant with default 0:length(counts) breaks:
>
> f2 <- c(30, 39, 31, 29, 10, 6, 3, 1, 0, 1)
> plot(freqhist(f2))
>
> Steve Ellison
>
>
*******************************************************************
This email and any attachments are confidential. Any use...{{dropped:8}}
More information about the R-help
mailing list