【1】引言
前序已经学习了hist()函数画直方图的基础教程,相关文章见下述链接:
python画图|hist()函数画直方图初探-CSDN博客
在这里我们初步认识了hist()函数,并使用该函数画出了8个直方图。
之后又用bar()函数进行对比,同时输出了两种直方图。
继续研究将会发现:hist()函数绘制直方图的时候,和bar()函数一致,需要约定X轴,但是hist()函数无需指明方块的高度,bar()函数需要指明方块高度。
为此,我们有必要继续研究一下,hist()函数画的直方图高度从何而来?
【2】官网教程
首先是到达hist()函数画图画图官网:
https://matplotlib.org/stable/plot_types/stats/hist_plot.html#sphx-glr-plot-types-stats-hist-plot-py
然后直接点击ax.hist()函数,会直接跳转到新链接:
https://matplotlib.org/stable/api/_as_gen/matplotlib.axes.Axes.hist.html#matplotlib.axes.Axes.hist
然而即使到这里,也不能很快理解直方图的高度该如何理解。
然后我点击了 np.random.normal()函数,这本是一个无意之举,但却进入下述链接,帮助揭露了真相。
https://numpy.org/doc/stable/reference/random/generated/numpy.random.normal.html#numpy.random.normal
上述链接说明, np.random.normal()函数按照正态分布的形式生成了随机数。
这启发我进一步探索。
【3】修改代码
首先把随机数的数量改为100个:
x = 4 + np.random.normal(0, 1.5, 100)
然后把输出直方图的边线从白色改为红色来加大辨识度,此外增设rwidth来控制方块间距。
ax.hist(x, bins=8, linewidth=0.5,rwidth=0.5, edgecolor="r")
运行代码后的输出图形为:
图1
图1以4为中心,左右基本呈对称布置,很像一个正态分布图形。
为此继续加大绘制出的直方图数量:把bins改为80。
ax.hist(x, bins=80, linewidth=0.5,rwidth=0.5, edgecolor="r")
新图像如下:
图2
图2整体上依然保持了正态分布的趋势,在这里以4为中心,可以理解为其来源于下述代码:
x=4+np.random.normal(0, 1.5, 100)
在图2我们发现直方图高度变小了。
对比图1和图2,隐约可以发现:直方图的高度数值相加总和=100。
【4】hist()参数正态分布关系理解
我们现在回到hist()函数定义的官网页面,重新理解这句话:
https://matplotlib.org/stable/api/_as_gen/matplotlib.axes.Axes.hist.html#matplotlib.axes.Axes.hist
This method uses numpy.histogram to bin the data in x and count the number of values in each bin, then draws the distribution either as a BarContainer or Polygon. The bins, range, density, and weights parameters are forwarded to numpy.histogram.
上述话语的意思是:hist()函数绘制的是x在所有自变量数据中出现的频率。
所以,hist()函数会自动输出x的频率即直方图高度。
有了这层理解,大胆做测试:输出一万个直方图
图3
至此的完整代码为为:
import matplotlib.pyplot as plt
import numpy as np
#plt.style.use('_mpl-gallery')
# make data
np.random.seed(1)
x = 4 + np.random.normal(0, 1.5, 10000)
#print('x=',x)
# plot:
fig, ax = plt.subplots()
ax.hist(x, bins=10000, linewidth=0.5,rwidth=0.5, edgecolor="y")
#ax.set(xlim=(0, 8), xticks=np.arange(1, 8),
#ylim=(0, 56), yticks=np.linspace(0, 56, 9))
plt.show()
【5】总结
理解了hist()函数中直方图高度的意义。