Plotting Histogram in Python using Matplotlib

A histogram is basically used to represent data provided in a form of some groups.It is accurate method for the graphical representation of numerical data distribution.It is a type of bar plot where X-axis represents the bin ranges while Y-axis gives information about frequency.

Creating a Histogram

To create a histogram the first step is to create bin of the ranges, then distribute the whole range of the values into a series of intervals, and the count the values which fall into each of the intervals.Bins are clearly identified as consecutive, non-overlapping intervals of variables.The matplotlib.pyplot.hist() function is used to compute and create histogram of x.
The following table shows the parameters accepted by matplotlib.pyplot.hist() function :

Attribute parameter
x array or sequence of array
bins optional parameter contains integer or sequence or strings
density optional parameter contains boolean values
range optional parameter represents upper and lower range of bins
histtype optional parameter used to creae type of histogram [bar, barstacked, step, stepfilled], default is “bar”
align optional parameter controls the plotting of histogram [left, right, mid]
weights optional parameter contains array of weights having same dimensions as x
bottom location of the basline of each bin
rwidth optional parameter which is relative width of the bars with respect to bin width
color optional parameter used to set color or sequence of color specs
label optional parameter string or sequence of string to match with multiple datasets
log optional parameter used to set histogram axis on log scale

Let’s create a basic histogram of some random values.Below code creates a simple histogram of some random values:

filter_none

edit
close

play_arrow

link
brightness_4
code

from matplotlib import pyplot as plt
import numpy as np
  
  
# Creating dataset
a = np.array([22, 87, 5, 43, 56
              73, 55, 54, 11,
              20, 51, 5, 79, 31,
              27])
  
# Creating histogram
fig, ax = plt.subplots(figsize =(10, 7))
ax.hist(a, bins = [0, 25, 50, 75, 100])
  
# Show plot
plt.show()

chevron_right


Output :

Customization of Histogram

Matplotlib provides a range of different methods to customize histogram.
matplotlib.pyplot.hist() function itself provides many attributes with the help of which we can modify a histogram.The hist() function provide a patches object which gives access to the properties of the created objects, using this we can modify the plot according to our will.



Example 1:

filter_none

edit
close

play_arrow

link
brightness_4
code

import matplotlib.pyplot as plt
import numpy as np
from matplotlib import colors
from matplotlib.ticker import PercentFormatter
  
# Creating dataset
np.random.seed(23685752)
N_points = 10000
n_bins = 20
  
# Creating distribution
x = np.random.randn(N_points)
y = .8 ** x + np.random.randn(10000) + 25
  
# Creating histogram
fig, axs = plt.subplots(1, 1,
                        figsize =(10, 7), 
                        tight_layout = True)
  
axs.hist(x, bins = n_bins)
  
# Show plot
plt.show()

chevron_right


Output :

Example 2: The code below modifies the above histogram for a better view and accurate readings.

filter_none

edit
close

play_arrow

link
brightness_4
code

import matplotlib.pyplot as plt
import numpy as np
from matplotlib import colors
from matplotlib.ticker import PercentFormatter
  
  
# Creating dataset
np.random.seed(23685752)
N_points = 10000
n_bins = 20
  
# Creating distribution
x = np.random.randn(N_points)
y = .8 ** x + np.random.randn(10000) + 25
legend = ['distribution']
  
# Creating histogram
fig, axs = plt.subplots(1, 1,
                        figsize =(10, 7), 
                        tight_layout = True)
  
  
# Remove axes splines 
for s in ['top', 'bottom', 'left', 'right']: 
    axs.spines[s].set_visible(False
  
# Remove x, y ticks
axs.xaxis.set_ticks_position('none'
axs.yaxis.set_ticks_position('none'
    
# Add padding between axes and labels 
axs.xaxis.set_tick_params(pad = 5
axs.yaxis.set_tick_params(pad = 10
  
# Add x, y gridlines 
axs.grid(b = True, color ='grey'
        linestyle ='-.', linewidth = 0.5
        alpha = 0.6
  
# Add Text watermark 
fig.text(0.9, 0.15, 'Jeeteshgavande30'
         fontsize = 12
         color ='red',
         ha ='right',
         va ='bottom'
         alpha = 0.7
  
# Creating histogram
N, bins, patches = axs.hist(x, bins = n_bins)
  
# Setting color
fracs = ((N**(1 / 5)) / N.max())
norm = colors.Normalize(fracs.min(), fracs.max())
  
for thisfrac, thispatch in zip(fracs, patches):
    color = plt.cm.viridis(norm(thisfrac))
    thispatch.set_facecolor(color)
  
# Adding extra features    
plt.xlabel("X-axis")
plt.ylabel("y-axis")
plt.legend(legend)
plt.title('Customized histogram')
  
# Show plot
plt.show()

chevron_right


Output :




My Personal Notes arrow_drop_up

Check out this Author's contributed articles.

If you like GeeksforGeeks and would like to contribute, you can also write an article using contribute.geeksforgeeks.org or mail your article to contribute@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.

Please Improve this article if you find anything incorrect by clicking on the "Improve Article" button below.