# How to plot a Histogram in R

Filed Under: R Programming

In this tutorial, we’ll go over the steps to plot a histogram in R. A histogram is a graphical representation of the values along with its range. It is similar to a bar plot and each bar present in a histogram will represent the range and height of the specified value.

R offers standard function hist() to plot the histogram in Rstudio. It also offers function geom_density() to plot histogram using ggplot2.

• A histogram provides the distribution of the data, frequency of the data along with its range.
• It is an easier way to visualize large data sets.
• The histogram also shows the skewness of the data.

## Types of Histogram plots in R

Based on the distribution of the data, a histogram exhibits many different shapes. In this section, we will try to understand the different types of histogram shapes and their meaning.

The major types of histogram distributions are,

• Normal distribution.
• Right skewed distribution.
• Left skewed distribution.
• Bimodal distribution

## Basic Histogram in R

In this section, we will plot a simple histogram using the ‘airquality’ data set.

Execute the below code to plot this simple histogram.

#this code imports the dataset from the R(built-in data sets)
datasets::airquality

#creates the simple histogram
hist(airquality\$Temp, xlab = 'Temparature', ylab='Frequency', main='Simple histogram plot', col = 'yellow', border = 'black')

## Normal distribution

A normal distribution in the histogram is the ideal bell-shaped plot, which contains less or no random data.

This distribution shows that the majority of the values are concentrated at the center range.

However, the remaining data points will end up as a tail in both sides as you can see in the below plot.

Execute the below code to create the histogram which shows the normal distribution.

#imports the default dataset which is present in R
data("iris")

Sepal.Length Sepal.Width Petal.Length Petal.Width Species
1          5.1         3.5          1.4         0.2  setosa
2          4.9         3.0          1.4         0.2  setosa
3          4.7         3.2          1.3         0.2  setosa
4          4.6         3.1          1.5         0.2  setosa
5          5.0         3.6          1.4         0.2  setosa

#creates the histogram bins based on 'sepal length'
hist(iris\$Sepal.Width, xlab = 'Sepal width', ylab = 'frequency', main='normal distribution of the data', col = 'brown')

## Left or Negatively Skewed Histogram in R

In this section, we will plot the left or negetive skewed histogram.

Negative skewed: If the histogram distribution shows the values which are concentrated on the right side and the tail will be on the left side or on the negative value side, then it is called as negatively of left-skewed distribution.

Execute the below code to create a negetive skewed histogram in Rstudio.

#imports the csv file
df
#plots the histogram which is negetively or left skewed
hist(df\$Rating, xlab = 'Ratings', ylab = 'Frequency', main = 'Negetive or left skewed distribution', col='brown')

## Right or Positively skewed Histogram

In this section, we will plot the right or positively skewed histogram.

Positive skewed: If the histogram’s distribution shows that the values are concentrated on the left side and tail is on the right side of the plot, then such distribution is called positively or right-skewed histogram distribution.

Execute the below code to plot the right or positively skewed histogram.

#imports the data from the R's default dataset named 'attenu'.
datasets::attenu

#plots the right or posiively skewed distribution
hist(attenu\$accel, xlab = 'attenu', ylab = 'Frequency', main = 'Right or positively skewed distribution', col = 'brown')

## Bimodal Distribution of the data plotted using Histogram

In this section, we will plot a bimodal distribution of the data.

Bimodal distribution: Bimodal distribution is a type of histogram distribution, where you can witness two data peaks.

In the below graph, the x value ‘quakes’ represent the quakes data distribution.

Execute the below code to plot the bimodal distribution.

#imports the data from the R's default dataset named 'quakes'
datasets::quakes

#plots the bimodal histogram distribution
hist(quakes\$depth, xlab = 'Quakes', ylab = 'Frequency', main = 'Bimodal distribution', col = 'brown')

## Plotting a Histogram using ggplot2 in R.

As you know ggplot2 is the most used visualization package in R.ggplot2 offers great themes and functions to create visually appealing graphs.

In this section, we will plot the histogram of the values present in the ‘diamonds’ data set, which is present in R by default.

Execute the below code to plot the histogram using ggplot2.

#install the required packages
install.packages('ggplot2')
install.packages('dplyr')
install.packages('ggthemes')

#import the required libraries
library(ggplot2)
library(dplyr)
library(ggthemes)

#shows the data
#plots the histogram
ggplot(diamonds, aes(carat))+geom_histogram()
#changes the bin width
ggplot(diamonds, aes(carat))+geom_histogram(binwidth = 0.01)
#adds the fill element and x,y and main labels of the graph
ggplot(diamonds, aes(carat, fill=cut))+geom_histogram()+labs(x='carats', y=' Frequency of carats')+ggtitle("Distribution of diamonds's carat by cut values")
#chnages the theme for attractive graph
ggplot(diamonds, aes(carat, fill=cut))+geom_histogram()+labs(x='carats', y=' Frequency of carats')+ggtitle("Distribution of diamonds's carat by cut values")+theme_classic()

## Conclusion

The histogram is similar to a bar plot, which represents the distribution of data along with their range.

R offers built-in functions such as hist() to plot the graph in basic R and geom_histogram() to plot the graph using ggplot2 in R.

The histogram has many types. The major ones are normal distribution, positively skewed, negatively skewed, and bimodal distribution.

In this tutorial all these plot types are explained and plotting using ggplot2 is also illustrated in the end.

I hope, you have understood the histogram plotting and usage of different types of histograms.

Try practicing with different datasets. For any queries, just post it in the comments section. keep going!!!

close
Generic selectors
Exact matches only
Search in title
Search in content