直方图的核心代码是:hist(),想绘制直方图,必须是没有统计过的数据(比如说一部60-65分钟的电影,如果我们已经知道60-65分钟的电影有8部,我们就不能用直方图了)
直方图应用场景:用户的年龄分布状态;一段时间内用户的点击次数分布状态;用户活跃时间的分布状态。
有多部电影把他们按时长分布绘制图形
#多部电影按时长绘制图形from matplotlib import pyplot as pyimport randomimport matplotlibfrom matplotlib import font_managera=[60,120,111,79,67,90,73,98,97,63,82,109,108,120,80,76,67,70,90,100]print(min(a),max(a),max(a)-min(a))#组距,这个是自己设置b=3#组数,组数等于极差除以组距g_num=(max(a)-min(a))//bprint(g_num)#刻度,只有max(a)+b才能取到所有值py.xticks(range(min(a),max(a)+b,b))#绘图py.hist(a,g_num)py.grid()#展示图形py.show()
绘制的图形
切记,极差与组距整除,才能被保证绘制的图形能与刻度对齐
比如,如果不能被整除的话,这里我们可以把组距调整为7,7不能被60整除
#多部电影按时长绘制图形from matplotlib import pyplot as pyimport randomimport matplotlibfrom matplotlib import font_managera=[60,120,111,79,67,90,73,98,97,63,82,109,108,120,80,76,67,70,90,105]print(min(a),max(a),max(a)-min(a))#组距,这个是自己设置b=7#组数g_num=(max(a)-min(a))//bprint(g_num)#刻度,max(a)+b才能qu'daopy.xticks(range(min(a),max(a)+b,b))#绘图py.hist(a,g_num)py.grid()#展示图形py.show()
绘制的图形与刻度是有偏差的,网格线与直方图相比偏左
当然也可以绘制概率的图形,只需要在hist()里再加一句normed=True,如果遇到这种提示:The 'normed' kwarg was deprecated in Matplotlib 2.1 and will be removed in 3.1. Use 'density' instead.就需要把normed=True替换成density=True.
#多部电影按时长绘制图形from matplotlib import pyplot as pyimport randomimport matplotlibfrom matplotlib import font_managera=[60,120,111,79,67,90,73,98,97,63,82,109,108,120,80,76,67,70,90,105]print(min(a),max(a),max(a)-min(a))#组距,这个是自己设置b=3#组数g_num=(max(a)-min(a))//bprint(g_num)#刻度,max(a)+b才能qu'daopy.xticks(range(min(a),max(a)+b,b))#绘图py.hist(a,g_num,density=True)py.grid()#展示图形py.show()
绘制的图形:
hist()可以传入的的三种参数汇总: