Histograms are one of the primary tools used in the analysis and interpretation of data in many fields, including statistics, data science, and machine learning. They provide a graphical representation of data distribution, allowing a quick understanding of the range, dispersion, skewness, and kurtosis of a dataset.
The number of bins in a histogram plays a critical role in the visual representation of the data. The choice of bin count can dramatically affect the resulting plot, and therefore, the interpretation of the data. Too few bins might oversimplify the data, missing out on important details. Conversely, too many bins might overcomplicate the picture, highlighting noise instead of the actual data pattern. Therefore, being able to adjust the number of bins in a histogram is crucial.
In this comprehensive guide, we will explore different methods to change the number of bins in a histogram using both base R functions and the popular visualization package ggplot2.
1. Changing the Number of Bins in Base R
In base R, you can use the hist()
function to generate histograms. This function has the breaks
argument that controls the number of bins.
Let’s start by creating a basic histogram with a default number of bins:
# Generate a normal distribution of 1000 random values
data <- rnorm(1000)
# Create a histogram
hist(data, main = "Histogram", xlab = "Values", ylab = "Frequency")

Here, rnorm(1000)
generates a normal distribution of 1000 random values, and hist()
creates a histogram of these values. The main
, xlab
, and ylab
arguments set the title and labels for the histogram.
To change the number of bins, you can use the breaks
argument. Here’s an example with 20 bins:
# Create a histogram with 20 bins
hist(data, breaks = 20, main = "Histogram with 20 Bins", xlab = "Values", ylab = "Frequency")

You can experiment with the breaks
argument to find the number of bins that provides the best representation of your data.
2. Changing the Number of Bins with ggplot2
The ggplot2 package provides more advanced and visually appealing options for creating histograms. To change the number of bins in a ggplot2 histogram, you can use the bins
argument in the geom_histogram()
function.
# Create a data frame
df <- data.frame(data)
# Create a histogram with ggplot2
ggplot(df, aes(data)) +
geom_histogram(binwidth = 0.5, fill = "skyblue") +
labs(title = "Histogram", x = "Values", y = "Frequency")

Here, data.frame(data)
creates a data frame from the data, and aes(data)
specifies that the data should be used for the x-axis. geom_histogram(binwidth = 0.5, fill = "skyblue")
then adds a histogram layer to the plot with a bin width of 0.5.
To change the number of bins, you can adjust the binwidth
argument. Alternatively, you can use the bins
argument to specify the number of bins directly:
# Create a histogram with 20 bins
ggplot(df, aes(data)) +
geom_histogram(bins = 20, fill = "skyblue") +
labs(title = "Histogram with 20 Bins", x = "Values", y = "Frequency")

3. Selecting the Optimal Number of Bins
Choosing the right number of bins can be subjective and depends on the specific dataset and the purpose of the histogram. Several rules of thumb can help choose a reasonable number of bins:
- Square-root rule: Choose the number of bins to be the square root of the number of observations. In R, this would be
breaks = sqrt(length(data))
for thehist()
function andbins = sqrt(nrow(df))
for thegeom_histogram()
function. - Sturges’ rule: Choose the number of bins to be
1 + log2(n)
, wheren
is the number of observations. In R, this would bebreaks = 1 + log2(length(data))
forhist()
andbins = 1 + log2(nrow(df))
forgeom_histogram()
. - Rice rule: Choose the number of bins to be
2 * n^(1/3)
, wheren
is the number of observations. In R, this would bebreaks = 2 * (length(data)^(1/3))
forhist()
andbins = 2 * (nrow(df)^(1/3))
forgeom_histogram()
.
Remember, these are just rules of thumb and may not always produce the best histogram for your data. It’s often a good idea to experiment with different numbers of bins to find the one that best represents your data.
4. Conclusion
In summary, understanding how to modify the number of bins in a histogram is a critical skill in data visualization and analysis. While it might seem like a minor adjustment, the number of bins can significantly influence the interpretation of a histogram. Using the base R function hist()
or geom_histogram()
from the ggplot2 package, you can easily control the number of bins in your histograms to best represent your data. Remember, the best number of bins is often dataset-specific and should be selected with care.