【Python】数据分析.matplotlib.直方图案例处理&条形图与直方图的对比

网友投稿 1418 2022-11-08

【Python】数据分析.matplotlib.直方图案例处理&条形图与直方图的对比

【Python】数据分析.matplotlib.直方图案例处理&条形图与直方图的对比

文章目录

​​数据分析-matplotlib.(频数\频率)直方图案例处理&条形图与直方图的对比​​

​​一、直方图​​

​​补充​​​​注意​​

​​二、直方图与条形图的对比​​

​​条形图案例​​

数据分析-matplotlib.(频数\频率)直方图案例处理&条形图与直方图的对比

一、直方图

假设你获取了250部电影的是长,希望获取这些电影时长的分布状态(某一时间段中电影的数量,出现的频率)等信息。

from matplotlib import pyplot as pltfrom matplotlib import font_manager#设置字体my_font=font_manager.FontProperties(fname="C:\Windows\Fonts\msyh.ttc")#设置坐标轴数据x = [131,98,125,131,124,139,131,117,128,108,135,138,131,102,107,114,119,128,121,142,127,130,124,101,110,116,117,110,128,128,115,99,136,126,134,95,138,117,111,78,132,124,113,150,110,117,86,95,144,105,126,130,126,130,126,116,123,106,112,138,123,86,101,99,136,123,117,119,105,137,123,128,125,104,109,134,125,127,105,120,107,129,116,108,132,103,136,118,102,120,114,105,115,132,145,119,121,112,139,125,138,109,132,134,156,106,117,127,144,139,139,119,140,83,110,102,123,107,143,115,136,118,139,123,112,118,125,109,119,133,112,114,122,109,106,123,116,131,127,115,118,112,135,115,146,137,116,103,144,83,123,111,110,111,100,154,136,100,118,119,133,134,106,129,126,110,111,109,141,120,117,106,149,122,122,110,118,127,121,114,125,126,114,140,103,130,141,117,106,114,121,114,133,137,92,121,112,146,97,137,105,98,117,112,81,97,139,113,134,106,144,110,137,137,111,104,117,100,111,101,110,105,129,137,112,120,113,133,112,83,94,146,133,101,131,116,111,84,137,115,122,106,144,109,123,116,111,111,133,150]#绘制直方图plt.hist(x,20) ----参见源码#设置网格plt.grid(alpha=0.3)#展示plt.show()

hist()源码:

在这里​​plt.hist(x,20)​​ 20指的就是bins,组数的意思。初稿设计如图所示,存在如下几个问题:

补充

组数:将数据分组,当数据在100个以内时,常分为5-12组。 组距:每个小组的两个端点之间的距离。

from matplotlib import pyplot as pltfrom matplotlib import font_manager#设置字体my_font=font_manager.FontProperties(fname="C:\Windows\Fonts\msyh.ttc")#设置坐标轴数据x = [131,98,125,131,124,139,131,117,128,108,135,138,131,102,107,114,119,128,121,142,127,130,124,101,110,116,117,110,128,128,115,99,136,126,134,95,138,117,111,78,132,124,113,150,110,117,86,95,144,105,126,130,126,130,126,116,123,106,112,138,123,86,101,99,136,123,117,119,105,137,123,128,125,104,109,134,125,127,105,120,107,129,116,108,132,103,136,118,102,120,114,105,115,132,145,119,121,112,139,125,138,109,132,134,156,106,117,127,144,139,139,119,140,83,110,102,123,107,143,115,136,118,139,123,112,118,125,109,119,133,112,114,122,109,106,123,116,131,127,115,118,112,135,115,146,137,116,103,144,83,123,111,110,111,100,154,136,100,118,119,133,134,106,129,126,110,111,109,141,120,117,106,149,122,122,110,118,127,121,114,125,126,114,140,103,130,141,117,106,114,121,114,133,137,92,121,112,146,97,137,105,98,117,112,81,97,139,113,134,106,144,110,137,137,111,104,117,100,111,101,110,105,129,137,112,120,113,133,112,83,94,146,133,101,131,116,111,84,137,115,122,106,144,109,123,116,111,111,133,150]#设置图形大小plt.figure(figsize=(20,8),dpi=80)#绘制直方图bin_width = 3 #设置组距为3num_bins = int((max(x)-min(x))/bin_width) #组数plt.hist(x,num_bins) #传入需要统计的数据、组数#plt.hist(x,[min(x)+i*bin_width for i in range(num_bins)]) #传入一个列表,长度为数组,值为分组依据,当组距不均匀时使用#plt.hist(x,num_bins,density=1) #density:false 是否绘制频率分布直方图,默认为频数直方图#设置坐标轴信息plt.xticks(list(range(min(x),max(x)+bin_width))[::bin_width],rotation=45)plt.xlabel("时长(分钟)",fontproperties=my_font)plt.ylabel("数量(部)",fontproperties=my_font)plt.title("250部电影的时长分布图",fontproperties=my_font)#设置网格plt.grid(True,linestyle="-.",alpha=0.3)#展示plt.show()

​​返回顶部​​

注意

1.若将组距改为5,则将会出现图形与x轴不对应,如图所示:

通过下图的计算,可以得知: 当组距是5时,极差为78,不是5的倍数,而每一组平均下来的距离就约是5.13,所以会比5多出一点点,之后就会出现累加效应。而且,可以发现最后一段本该属于148-153,最大值是156,并未显示出来,出现数据缺失。所以要控制好组距。

2.改成频率分布直方图 ---- 添加属性density

plt.hist(x,num_bins,density=1) #normed:bool 是否绘制频率分布直方图,默认为频数直方图

​​返回顶部​​

二、直方图与条形图的对比

1.首先,条形图是用条形的长度表示各类别频数的多少,其宽度(表示类别)则是固定的; 2.直方图是用面积表示各组频数的多少,矩形的高度表示每一组的频数或频率,宽度则表示各组的组距,因此其高度与宽度均有意义。 3.其次,由于分组数据具有连续性,直方图的各矩形通常是连续排列,而条形图则是分开排列。 4.最后,条形图主要用于展示分类数据,而直方图则主要用于展示数据型数据。 5.对于观察未进行统计的数据时通常采用直方图,可以在统计的同时观测数据分布;对于已经统计好的数据可根据要求选择图形样式。

​​条形图案例​​

例题辨析:

分析:对于以上题目所给的数据,可以看出已经进行过统计。因为quality表示的是在某个范围内满足条件的人数,所以不建议使用直方图,此时有范围和数据,我们可以采用条形图的设计以达到直方图的效果~

from matplotlib import pyplot as pltfrom matplotlib import font_manager#设置字体my_font=font_manager.FontProperties(fname="C:\Windows\Fonts\msyh.ttc")#设置数据interval = [0,5,10,15,20,25,30,35,40,45,60,90]width = [5,5,5,5,5,5,5,5,5,15,30,63] #组距quantity = [836,2737,3723,3926,3596,1438,3273,642,824,613,215,47]#设置图形大小plt.figure(figsize=(20,8),dpi=80)#绘制图形plt.bar(range(len(quantity)),quantity)#展示plt.show()

查询源码可以看到,条形图的默认宽度为0.8,我们将其调整为1(​​plt.bar(range(len(quantity)),quantity,width=1)​​),此时运行如下图所示,效果与直方图就十分接近了。

from matplotlib import pyplot as pltfrom matplotlib import font_manager#设置字体my_font=font_manager.FontProperties(fname="C:\Windows\Fonts\msyh.ttc")#设置数据interval = [0,5,10,15,20,25,30,35,40,45,60,90]width = [5,5,5,5,5,5,5,5,5,15,30,60] #组距quantity = [836,2737,3723,3926,3596,1438,3273,642,824,613,215,47]#设置图形大小plt.figure(figsize=(20,8),dpi=80)#绘制图形plt.bar(range(len(quantity)),quantity,width=1)#设置x轴刻度x_ = [i-0.5 for i in range(12)]_x_labels = intervalplt.xticks(x_,_x_labels)#设置网格plt.grid(True,linestyle="-.",alpha=0.3)#展示plt.show()

通过对x轴刻度的修改,满足了题意。但是还有个细节,就是最后一个刻度未显示,从题目中可以看出最后组距为60,所以刻度应该是150,这时需要修改代码:

#设置x轴刻度x_ = [i-0.5 for i in range(13)]_x_labels = interval+[150]plt.xticks(x_,_x_labels)

最后进行优化:

from matplotlib import pyplot as pltfrom matplotlib import font_manager#设置字体my_font=font_manager.FontProperties(fname="C:\Windows\Fonts\msyh.ttc")#设置数据interval = [0,5,10,15,20,25,30,35,40,45,60,90]width = [5,5,5,5,5,5,5,5,5,15,30,60] #组距quantity = [836,2737,3723,3926,3596,1438,3273,642,824,613,215,47]#设置图形大小plt.figure(figsize=(20,8),dpi=80)#绘制图形plt.bar(range(len(quantity)),quantity,width=1)#设置x轴刻度x_ = [i-0.5 for i in range(13)]_x_labels = interval+[150]plt.xticks(x_,_x_labels)#添加信息plt.xlabel("所花时间(分钟)",fontproperties=my_font)plt.ylabel("数量(人)",fontproperties=my_font)plt.title("2004年美国人花费在上班途中的时间分布图",fontproperties=my_font)#设置网格plt.grid(True,linestyle="-.",alpha=0.3)#展示plt.show()

​​返回顶部​​

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:解决mybatis
下一篇:Spring复杂对象创建的方式小结
相关文章

 发表评论

暂时没有评论,来抢沙发吧~