matplotlib绘图【直方图】

当数据量太大时,往往需要讲数据进行分组,这样能够有效的减少统计误差。
组数要适当,太少会有较大误差,太多规律显示不明显。

组数:将数据分组,当数据在100个以内时,按数据多少分为5-12组
组距:指小组的两个端点的距离。

		极差 	max(a) - min(a)
组数 = ------ = ----------------
		组距		  bin width

事例:假如你获取了250部电影的时长(列表a中),希望统计出这些电影时长的分布状态(比如时长为100分钟到120分钟的电影的数量,出现的频率)等信息,你应该如何呈现出这些数据?

from matplotlib import pyplot as plt
from matplotlib import font_manager


my_font = font_manager.FontProperties(fname="/usr/share/fonts/opentype/noto/NotoSerifCJK-Bold.ttc",
                                      size="x-small")

a = [73, 113, 90, 77, 98, 147, 150, 144, 90, 100, 76, 153, 124, 87, 108, 97, 98, 72, 113, 120, 83, 97, 111, 108, 116,
     147, 127, 97, 137, 131, 137, 111, 88, 119, 82, 120, 135, 135, 89, 76, 112, 110, 142, 136, 89, 117, 103, 79, 133,
     92, 124, 88, 83, 80, 125, 99, 114, 124, 140, 81, 143, 101, 150, 117, 113, 155, 90, 145, 122, 95, 100, 125, 83, 76,
     131, 91, 151, 122, 151, 115, 77, 146, 145, 79, 80, 100, 108, 104, 105, 140, 110, 90, 133, 137, 152, 96, 151, 102,
     146, 154, 136, 125, 88, 142, 82, 148, 105, 128, 118, 88, 74, 110, 75, 80, 107, 116, 94, 88, 132, 89, 123, 93, 116,
     73, 148, 102, 153, 151, 154, 111, 111, 109, 142, 87, 75, 135, 120, 146, 120, 154, 131, 140, 85, 102, 138, 127, 72,
     98, 124, 127, 112, 138, 105, 152, 97, 88, 126, 129, 118, 137, 155, 102, 85, 71, 110, 105, 132, 86, 86, 109, 131,
     127, 149, 70, 83, 143, 148, 139, 91, 96, 148, 153, 134, 151, 103, 76, 111, 110, 93, 105, 101, 75, 137, 120, 89,
     133, 151, 103, 108, 92, 111, 151, 127, 127, 72, 101, 77, 74, 136, 109, 141, 114, 100, 147, 128, 93, 103, 114, 97,
     82, 111, 152, 142, 79, 142, 91, 152, 99, 81, 97, 83, 136, 105, 146, 148, 84, 141, 154, 138, 121, 153, 141, 102,
     120, 72, 75, 143, 100, 83, 113]

# 组距
d = 5

# 计算组数
# 此处应注意 num_bins最好是整除的结果,否则可能会出现图形与刻度对应有偏差
num_bins = (max(a) - min(a)) // d

# 绘图
plt.hist(a, num_bins)

# x轴坐标
plt.xticks(range(min(a), max(a)+d, d))

# 绘制网格
plt.grid(alpha=0.3)

# 展示
plt.show()

在这里插入图片描述

在美国2004年人口普查发现有124million的人在距离家相对较远的地方工作,根据他们从家到上班地点所需的时间,通过抽样统计(最后一列)出了下标的数据,根据这些数据能够绘制直方图吗?

  • 不能,直方图的绘制必须拿到原始数据
  • 下面的数据是已经统计好的,所以我们可以使用条形图进行展示
IntervalWidthQuantityQuantity/Width
054180836
55136872737
105186183723
155196343926
205179183596
25571901438
305163693273
3553212642
4054122824
45159200613
60306461215
9060343557
from matplotlib import pyplot as plt
from matplotlib import font_manager


my_font = font_manager.FontProperties(fname="/usr/share/fonts/opentype/noto/NotoSerifCJK-Bold.ttc",
                                      size="x-small")

# 耗时
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.bar(interval, quantity, width=width)

# x轴刻度
_x = [i-2.5 for i in interval]
plt.xticks(_x, interval)

# 网格
plt.grid(alpha=0.3)

# 展示
plt.show()

在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值