Rev 88598 | Blame | Compare with Previous | Last modification | View Log | Download | RSS feed
% File src/library/graphics/man/hist.Rd% Part of the R package, https://www.R-project.org% Copyright 1995-2026 R Core Team% Distributed under GPL 2 or later\name{hist}\title{Histograms}\usage{hist(x, \dots)\method{hist}{default}(x, breaks = "Sturges",freq = NULL, probability = !freq,include.lowest = TRUE, right = TRUE, fuzz = 1e-7,density = NULL, angle = 45, col = "lightgray", border = NULL,main = paste("Histogram of" , xname),xlim = range(breaks), ylim = NULL,xlab = xname, ylab,axes = TRUE, plot = TRUE, labels = FALSE,nclass = NULL, warn.unused = TRUE, panel.first = NULL, \dots)}\alias{hist}\alias{hist.default}\arguments{\item{x}{a vector of values for which the histogram is desired.}\item{breaks}{one of:\itemize{\item a vector giving the breakpoints between histogram cells,\item a function to compute the vector of breakpoints,\item a single number giving the number of cells for the histogram,\item a character string naming an algorithm to compute thenumber of cells (see \sQuote{Details}),\item a function to compute the number of cells.}In the last three cases the number is a suggestion only; as thebreakpoints will be set to \code{\link{pretty}} values, the numberis limited to \code{1e6} (with a warning if it was larger). If\code{breaks} is a function, the \code{x} vector is supplied to itas the only argument (and the number of breaks is only limited bythe amount of available memory).}\item{freq}{logical; if \code{TRUE}, the histogram graphic is arepresentation of frequencies, the \code{counts} component ofthe result; if \code{FALSE}, probability densities, component\code{density}, are plotted (so that the histogram has a total areaof one). Defaults to \code{TRUE} \emph{if and only if} \code{breaks} areequidistant (and \code{probability} is not specified).}\item{probability}{an \emph{alias} for \code{!freq}, for S compatibility.}\item{include.lowest}{logical; if \code{TRUE}, an \code{x[i]} equal tothe \code{breaks} value will be included in the first (or last, for\code{right = FALSE}) bar. This will be ignored (with a warning)unless \code{breaks} is a vector.}\item{right}{logical; if \code{TRUE}, the histogram cells areright-closed (left open) intervals.}\item{fuzz}{non-negative number, for the case when the data is\dQuote{pretty} and some observations \code{x[.]} are close but notexactly on a \code{break}. For counting fuzzy breaks proportionalto \code{fuzz} are used. The default is occasionally suboptimal.}\item{density}{the density of shading lines, in lines per inch.The default value of \code{NULL} means that no shading linesare drawn. Non-positive values of \code{density} also inhibit thedrawing of shading lines.}\item{angle}{the slope of shading lines, given as an angle indegrees (counter-clockwise).}\item{col}{a colour to be used to fill the bars.}\item{border}{the color of the border around the bars. The defaultis to use the standard foreground color.}\item{main, xlab, ylab}{main title and axis labels: these arguments to\code{\link{title}()} get \dQuote{smart} defaults here, e.g., the default\code{ylab} is \code{"Frequency"} iff \code{freq} is true.}\item{xlim, ylim}{the range of x and y values with sensible defaults.Note that \code{xlim} is \emph{not} used to define the histogram (breaks),but only for plotting (when \code{plot = TRUE}).}\item{axes}{logical. If \code{TRUE} (default), axes are drawn when the plot is.}\item{plot}{logical. If \code{TRUE} (default), a histogram isplotted, otherwise a list of breaks and counts is returned. In thelatter case, a warning is used if (typically graphical) argumentsare specified that only apply to the \code{plot = TRUE} case.}\item{labels}{logical or character string. Additionally draw labels on topof bars, if not \code{FALSE}; see \code{\link{plot.histogram}}.}\item{nclass}{numeric (integer). For S(-PLUS) compatibility only,\code{nclass} is equivalent to \code{breaks} for a scalar orcharacter argument.}\item{warn.unused}{logical. If \code{plot = FALSE} and\code{warn.unused = TRUE}, a warning will be issued when graphicalparameters are passed to \code{hist.default()}.}\item{panel.first}{an \sQuote{expression} to be evaluated after theplot axes are set up but before any plotting takes place. This canbe useful for drawing background grids. Note that this works bylazy evaluation: passing this argument from other function maywell not work since it may be evaluated too early.}\item{\dots}{further arguments and \link{graphical parameters} passed to\code{\link{plot.histogram}} and thence to \code{\link{title}} and\code{\link{axis}} (if \code{plot = TRUE}).}}\description{The generic function \code{hist} computes a histogram of the givendata values. If \code{plot = TRUE}, the resulting object of\link{class} \code{"histogram"} is plotted by\code{\link{plot.histogram}}, before it is returned.}\details{The definition of \emph{histogram} differs by source (withcountry-specific biases). \R's default with equispaced breaks (alsothe default) is to plot the counts in the cells defined by\code{breaks}. Thus the height of a rectangle is proportional tothe number of points falling into the cell, as is the area\emph{provided} the breaks are equally-spaced.The default with non-equispaced breaks is to givea plot of area one, in which the \emph{area} of the rectangles is thefraction of the data points falling in the cells.If \code{right = TRUE} (default), the histogram cells are intervalsof the form \eqn{(a, b]}, i.e., they include their right-hand endpoint,but not their left one, with the exception of the first cell when\code{include.lowest} is \code{TRUE}.For \code{right = FALSE}, the intervals are of the form \eqn{[a, b)},and \code{include.lowest} means \sQuote{\emph{include highest}}.A numerical tolerance of \eqn{10^{-7}}{1e-7} times the median bin size(for more than four bins, otherwise the median is substituted) isapplied when counting entries on the edges of bins. This is notincluded in the reported \code{breaks} nor in the calculation of\code{density}.The default for \code{breaks} is \code{"Sturges"}: see\code{\link{nclass.Sturges}}. Other names for which algorithmsare supplied are \code{"Scott"} and \code{"FD"} /\code{"Freedman-Diaconis"} (with corresponding functions\code{\link{nclass.scott}} and \code{\link{nclass.FD}}).Case is ignored and partial matching is used.Alternatively, a function can be supplied whichwill compute the intended number of breaks or the actual breakpointsas a function of \code{x}.}\value{an object of class \code{"histogram"} which is a list with components:\item{breaks}{the \eqn{n+1} cell boundaries (= \code{breaks} if thatwas a vector). These are the nominal breaks, not with the boundary fuzz.}\item{counts}{\eqn{n} integers; for each cell, the number of\code{x[]} inside.}\item{density}{values \eqn{\hat f(x_i)}{f^(x[i])}, as estimateddensity values. If \code{all(diff(breaks) == 1)}, they are therelative frequencies \code{counts/n} and in general satisfy\eqn{\sum_i \hat f(x_i) (b_{i+1}-b_i) = 1}{sum[i; f^(x[i])(b[i+1]-b[i])] = 1}, where \eqn{b_i}{b[i]} = \code{breaks[i]}.}\item{mids}{the \eqn{n} cell midpoints.}\item{xname}{a character string with the actual \code{x} argument name.}\item{equidist}{logical, indicating if the distances between\code{breaks} are all the same.}}\references{\bibshow{R:Becker+Chambers+Wilks:1988,R:Venables+Ripley:2002}}\seealso{\code{\link{nclass.Sturges}}, \code{\link{stem}},\code{\link{density}}, \code{\link[MASS]{truehist}} in package\CRANpkg{MASS}.Typical plots with vertical bars are \emph{not} histograms. Consider\code{\link{barplot}} or \code{\link{plot}(*, type = "h")}for such bar plots.}\examples{op <- par(mfrow = c(2, 2))hist(islands)utils::str(hist(islands, col = "gray", labels = TRUE))hist(sqrt(islands), breaks = 12, col = "lightblue", border = "pink")##-- For non-equidistant breaks, counts should NOT be graphed unscaled:r <- hist(sqrt(islands), breaks = c(4*0:5, 10*3:5, 70, 100, 140),col = "blue1")text(r$mids, r$density, r$counts, adj = c(.5, -.5), col = "blue3")sapply(r[2:3], sum)sum(r$density * diff(r$breaks)) # == 1lines(r, lty = 3, border = "purple") # -> lines.histogram(*)par(op)require(utils) # for strstr(hist(islands, breaks = 12, plot = FALSE)) #-> 10 (~= 12) breaksstr(hist(islands, breaks = c(12,20,36,80,200,1000,17000), plot = FALSE))hist(islands, breaks = c(12,20,36,80,200,1000,17000), freq = TRUE,main = "WRONG histogram") # and warning\donttest{% save 2 seconds## Extreme outliers; the "FD" rule would take very large number of 'breaks':XXL <- c(1:9, c(-1,1)*1e300)hh <- hist(XXL, "FD") # did not work in R <= 3.4.1; now gives warning## pretty() determines how many counts are used (platform dependently!):length(hh$breaks) ## typically 1 million -- though 1e6 was "a suggestion only"}## R >= 4.2.0: no "*.5" labels on y-axis:hist(c(2,3,3,5,5,6,6,6,7))require(stats)set.seed(14)x <- rchisq(100, df = 4)## Histogram with custom x-axis:hist(x, xaxt = "n")axis(1, at = 0:17)\dontshow{op <- par(mfrow = 2:1, mgp = c(1.5, 0.6, 0), mar = .1 + c(3,3:1))}## Comparing data with a model distribution should be done with qqplot()!qqplot(x, qchisq(ppoints(x), df = 4)); abline(0, 1, col = 2, lty = 2)## if you really insist on using hist() ... :hist(x, freq = FALSE, ylim = c(0, 0.2))curve(dchisq(x, df = 4), col = 2, lty = 2, lwd = 2, add = TRUE)\dontshow{par(op)}}\keyword{dplot}\keyword{hplot}\keyword{distribution}