geom_bargeom_bar(mapping=NULL, data=NULL, stat="bin", position="stack", ...)
Bars, rectangles with bases on y-axis
The bar geom is used to produce 1d area plots: bar charts for categorical x, and histograms for continuous y. stat_bin explains the details of these summaries in more detail. In particular, you can use the weight aesthetic to create weighted histograms and barcharts where the height of the bar no longer represent a count of observations, but a sum over some other variable. See the examples for a practical example.
By default, multiple x's occuring in the same place will be stacked a top one another by position_stack. If you want them to be dodged from side-to-side, check out position_dodge. Finally, position_fill shows relative propotions at each x by stacking the bars and then stretch or squashing them all to the same height
This page describes geom_bar, see layer and qplot for how to create a complete plot from individual components.
If you have presummarised data, use stat="identity" to turn off the default summary
Sometimes, bar charts are used not as a distributional summary, but instead of a dotplot. Generally, it's preferable to use a dotplot (see geom_point) as it has a better data-ink ratio. However, if you do want to create this type of plot, you can set y to the value you have calculated, and use stat='identity'.
A bar chart maps the height of the bar to a variable, and so the base of the bar must always been shown to produce a valid visual comparison. Naomi Robbins has a nice article on this topic. This is the reason it doesn't make sense to use a log-scaled y axis.
What do you think of the documentation? Please let me know by filling out this short online survey.
The following aesthetics can be used with geom_bar. Aesthetics are mapped to variables in the data with the aes function: geom_bar(aes(x = var)). Note that you do not need quotes around the variable name.
Scales control how the variable is mapped to the aesthetic and are listed after each aesthetic.
| Aesthetic | Default | Related scales |
|---|---|---|
| x | required | continuous, date, datetime, discrete |
| colour | NA | brewer, gradient, gradient2, gradientn, grey, hue, identity, manual |
| fill | grey20 | brewer, gradient, gradient2, gradientn, grey, hue, identity, manual |
| size | 0.5 | identity, manual, size |
| linetype | 1 | identity, linetype, manual |
| weight | 1 | |
| alpha | 1 |
Layers are divided into groups by the group aesthetic. By default this is set to the interaction of all categorical variables present in the plot.
Parameters control the appearance of the geom. In addition to the parameters listed below (if any), any aesthetic can be used as a parameter, in which case it will override any aesthetic mapping.
This function returns a layer object.
> # Generate data > c <- ggplot(mtcars, aes(factor(cyl))) > > c + geom_bar()> c + geom_bar() + coord_flip()
> c + geom_bar(fill="white", colour="darkgreen")
> > # Use qplot > qplot(factor(cyl), data=mtcars, geom="bar")
> qplot(factor(cyl), data=mtcars, geom="bar", fill=factor(cyl))
> > # Stacked bar charts > qplot(factor(cyl), data=mtcars, geom="bar", fill=factor(vs))
> qplot(factor(cyl), data=mtcars, geom="bar", fill=factor(gear))
> > # Stacked bar charts are easy in ggplot2, but not effective visually, > # particularly when there are many different things being stacked > ggplot(diamonds, aes(clarity, fill=cut)) + geom_bar()
> ggplot(diamonds, aes(color, fill=cut)) + geom_bar() + coord_flip()
> > # Faceting is a good alternative: > ggplot(diamonds, aes(clarity)) + geom_bar() + + facet_wrap(~ cut)
> # If the x axis is ordered, using a line instead of bars is another > # possibility: > ggplot(diamonds, aes(clarity)) + + geom_freqpoly(aes(group = cut, colour = cut))
> > # Dodged bar charts > ggplot(diamonds, aes(clarity, fill=cut)) + geom_bar(position="dodge")
> # compare with > ggplot(diamonds, aes(cut, fill=cut)) + geom_bar() + + facet_grid(. ~ clarity)
> > # But again, probably better to use frequency polygons instead: > ggplot(diamonds, aes(clarity, colour=cut)) + + geom_freqpoly(aes(group = cut))
> > # Often we don't want the height of the bar to represent the > # count of observations, but the sum of some other variable. > # For example, the following plot shows the number of diamonds > # of each colour > qplot(color, data=diamonds, geom="bar")
> # If, however, we want to see the total number of carats in each colour > # we need to weight by the carat variable > qplot(color, data=diamonds, geom="bar", weight=carat, ylab="carat")
> > # A bar chart used to display means > meanprice <- tapply(diamonds$price, diamonds$cut, mean) > cut <- factor(levels(diamonds$cut), levels = levels(diamonds$cut)) > qplot(cut, meanprice)
> qplot(cut, meanprice, geom="bar", stat="identity")
> qplot(cut, meanprice, geom="bar", stat="identity", fill = I("grey50"))
![]()
What do you think of the documentation? Please let me know by filling out this short online survey.