The following should do:
import numpy as np from numpy import array import matplotlib.pyplot as plt H1 = np.loadtxt('histogramrate25p10area30.txt') newH1 = H1[~np.isnan(H1)] norm1 = np.apply_along_axis(func1d=lambda x: x/np.max(newH1), arr=newH1, axis=0) nbins1 = 400 plt.hist(norm1, nbins1, color='purple', alpha=0.5) plt.figure() plt.subplot(111) plt.hist(norm1, nbins1, color='purple', alpha=0.5) plt.ylabel('Frequency', fontsize=20) plt.show()
Explanation:
The script above loads the data with the help of the np.loadtxt
function and subsequently removes the rows that contain null values. The latter is done by indexing the imported array with the boolean array ~np.isnan(H1)
. Here, np.isnan
finds the rows where the values are null
or nan
and the ~
sign negates that; changing the True
values to False
, and vice-versa. Once that’s done, it moves on to applying a function to each value of the new array. The function here is lambda x: x/np.max(newH1)
; which basically divides each value of the array by the maximum value present in the new array.
The next step is to plot the histogram. We set the number of bins needed to 400 and use plt.hist
to plot the histogram. There is also an added bonus to create a figure
and then add a subplot
to our figure
. Subsequently, we use the subplot
to draw the histogram.
I hope this proves useful.