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 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 create 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 baseline 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:
Python3
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() |
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:
Python3
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() |
Output :
Example 2: The code below modifies the above histogram for a better view and accurate readings.
Python3
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() |
Output :