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? Thanks Nick Wray [[alternative HTML version deleted]]
On Wed, 9 Oct 2019 16:12:57 +0100 (BST) Nick Wray via R-help <r-help at r-project.org> wrote:> 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> I can't see an elegant way <...> of creating a histogram from this > data set. Is there one?A histogram is a bar plot of frequencies of data values falling into specific bins, so you can reconstruct one yourself using the barplot() function. -- Best regards, Ivan
> 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}}
Aargh of course - so obvious I'd completely overlooked that.>. Thanks Nick> On 09 October 2019 at 16:21 Ivan Krylov <krylov.r00t at gmail.com> wrote: > > > On Wed, 9 Oct 2019 16:12:57 +0100 (BST) > Nick Wray via R-help <r-help at r-project.org> wrote: > > > 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 > > > I can't see an elegant way <...> of creating a histogram from this > > data set. Is there one? > > A histogram is a bar plot of frequencies of data values falling into > specific bins, so you can reconstruct one yourself using the barplot() > function. > > -- > Best regards, > Ivan
Hello, Here are 3 ways. The first are almost the same, they use base graphics. x <- 1:6 y <- c(73,53,42,67,41,50) barplot(setNames(y, x)) Or names(y) <- x barplot(y) And 3: library(ggplot2) ggplot(data.frame(x, y), aes(x, y)) + geom_col() Hope this helps, Rui Barradas ?s 16:12 de 09/10/19, Nick Wray via R-help escreveu:> 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? > > Thanks Nick Wray > [[alternative HTML version deleted]] > > ______________________________________________ > R-help at r-project.org mailing list -- To UNSUBSCRIBE and more, see > 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. >
> On Oct 9, 2019, at 9:58 AM, Rui Barradas <ruipbarradas at sapo.pt> wrote: > > Hello, > > Here are 3 ways. >For a large number of bars, sometimes this: plot( y, type='h') # maybe use lwd=5 Chuck> The first are almost the same, they use base graphics. > > x <- 1:6 > y <- c(73,53,42,67,41,50) > > barplot(setNames(y, x)) > > Or > > names(y) <- x > barplot(y) > > > And 3: > > library(ggplot2) > ggplot(data.frame(x, y), aes(x, y)) + > geom_col() > > > Hope this helps, > > Rui Barradas > > > ?s 16:12 de 09/10/19, Nick Wray via R-help escreveu: >> 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? >> Thanks Nick Wray >> [[alternative HTML version deleted]] >> ______________________________________________ >> R-help at r-project.org mailing list -- To UNSUBSCRIBE and more, see >> 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. >> >