matplotlib绘制直方图

#假设你获取了250部电影的时长(列表a中),希望统计出这些电影时长的分布状态(比如时长为100分钟到120分钟电影的数量,出现的频率)等信息,你应该如何呈现这些数据?
#a=[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, 78, 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,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,106,
 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]

import matplotlib.pyplot as plt
from matplotlib.font_manager import FontProperties

font = {'family':'SimHei',
        'weight':'bold',
        'size':'12'}
plt.rc('font', **font)
plt.rc('axes', unicode_minus=False)


a=[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, 78, 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,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,106,
 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]
print(len(a))

plt.figure(figsize=(20,8),dpi = 80)
#plt.hist(a,num_bins)该函数参数需要统计的数据a,以及组数num_bins。
#其中组数num_bins= int( (max(a)-min(a) ) /bin_width)
#组数:将数据分组,当数据在100个以内时,按数据多少常分5-12。

bin_width = 6#bin_width的值选择,尽量能将(max(a)-min(a)整除,否则g画的直方图将有问题
num_bins = int((max(a)-min(a))/bin_width)
print(num_bins)

plt.subplot(121)
plt.hist(a,num_bins)

#设置x轴刻度
plt.xticks(range(min(a),max(a)+bin_width,bin_width))
plt.xlabel("电影时长(分钟)")
plt.ylabel("电影数(部)")
plt.title("250部电影的时长直方图")
plt.grid(alpha = 0.2)

plt.subplot(122)
plt.hist(a,num_bins,density = True)#频率直方图
#设置x轴刻度
plt.xticks(range(min(a),max(a)+bin_width,bin_width))
plt.xlabel("电影时长(分钟)")
plt.ylabel("电影频率")
plt.title("250部电影时长的频率直方图")
plt.grid(alpha = 0.2)


plt.savefig("250部电影的时长直方图.png")
plt.show()


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值