Python matplotlib绘制直方图:属性、类型与实战案例
本文详细介绍Python中matplotlib库绘制直方图的方法。涵盖直方图定义、适用场景及绘制步骤,深入解析facecolor、bins、alpha、histtype等关键属性。通过员工身高分析案例,演示基础直方图、带折线辅助、堆叠直方图、不等距及多类直方图的实现代码与效果。
复习回顾:
在前面的章节中,我们已经系统学习了matplotlib模块的底层架构以及基础绘图流程,并掌握了折线图和柱状图的具体绘制技巧。
matplotlib模块基础:掌握常用绘图方法
matplotlib模块底层原理:理解脚本层、美工层与后端层的协作机制
matplotlib绘制折线图:梳理相关属性与方法
matplotlib绘制柱状图:总结相关属性与方法
在数据分析过程中,我们需要根据数据特征选择合适的图表进行展示。当需要表达“质量分布”这一概念时,直方图是最佳选择。

1. 直方图概述
1.1 什么是直方图?
- 直方图是一种用于可视化连续区间或特定时间段内数据分布情况的图表。
- 直方图也被称为质量分布图,它是条形图的一种特殊形式。
- 在直方图中,横轴(x轴)表示数据的类型或区间,纵轴(y轴)表示分布情况。每个数据柱的宽度可以根据需要进行调整。
1.2 直方图的使用场景
- 直方图常用于概率分布分析,展示一组数据在指定范围内的出现概率。
- 它可以直观地展示数据的分布频率情况。
- 通过直方图,可以方便地定位众数和中位数的位置。
- 直方图有助于关注数据中存在的缺口或异常值。
1.3 直方图的绘制步骤
- 第一步,导入matplotlib.pyplot模块。
- 第二步,准备数据,可以使用numpy或pandas库对数据进行整理。
- 第三步,调用pyplot.hist()函数来绘制直方图。
1.4 案例展示
本次案例我们将分析公司员工的身高分布情况。
首先准备案例数据,使用numpy随机生成200个身高数据。
import numpy as np
x_value = np.random.randint(140,180,200)
接下来绘制直方图:
import matplotlib.pyplot as plt
plt.hist(x_value,bins=10)
plt.title("data analyze")
plt.xlabel("height")
plt.ylabel("rate")
plt.show()

2. 直方图属性详解
2.1 设置颜色
- 设置长条形填充颜色的关键字参数为facecolor。
- 设置长条形边框颜色的关键字参数为edgecolor。
颜色的取值方式如下:
- 使用颜色的英文全称,例如红色"red",黄色"yellow"。
- 使用颜色的英文简称,例如红色"r",蓝色"b"。
- 使用RGB格式(r,g,b),其中各分量的取值范围为0~1。
2.2 设置长条形数目
- 控制长条形数目的关键字参数为bins。
- 该参数为可选项,默认值为10。
2.3 设置透明度
- 控制透明度的关键字参数为alpha。
- 默认值为0(即完全不透明),取值范围为0~1。
2.4 设置样式
- 控制直方图样式的关键字参数为histtype。
- 具体取值说明如下:
| 属性值 | 说明 |
|---|---|
| 'bar' | 柱状形数据并排,默认值 |
| 'barstacked' | 柱状形数据重叠并排 |
| 'step' | 柱状形颜色不填充 |
| 'stepfilled' | 填充的线性 |
我们在第一节的基础代码中,添加柱状形不填充效果,并将边框颜色设置为红色。
plt.hist(x_value,bins=10,edgecolor="r",histtype="step")

将边框设置为红色,同时设置透明度为0.5。
plt.hist(x_value,bins=10,edgecolor="r",histtype="bar",alpha=0.5)

3. 添加折线直方图
在直方图中,我们可以叠加一个折线图,以辅助观察数据的变化趋势。
- 首先,通过pyplot.subplot()创建Axes对象。
- 接着,通过Axes对象调用hist()方法绘制直方图,该方法会返回绘制折线图所需的x和y数据。
- 然后,利用Axes对象调用plot()方法绘制折线图。
- 我们对第一节的代码进行如下改造:
fig,ax = plt.subplots()
n,bins_num,pat = ax.hist(x_value,bins=10,alpha=0.75)
ax.plot(bins_num[:10],n,marker = 'o',color="yellowgreen",linestyle="--")

4. 堆叠直方图
有时我们需要在相同数据范围内,对比两组不同对象群体的数据差异。
首先准备两组数据:
import numpy as np
x_value = np.random.randint(140,180,200)
x2_value = np.random.randint(140,180,200)
- 直方图属性data:以列表形式传入两组数据。
- 设置直方图属性stacked为True,允许数据在图表中重叠显示。
plt.hist([x_value,x2_value],bins=10,stacked=True)

5. 不等距直方图
上述绘制的直方图均为等距柱状,我们可以指定一组数据传入bins属性来实现不等距。
- bins关键字:用于指定直方图中柱状形的具体边界值。
- 更改上述代码后,观察效果如下:
bin_num = [140,155,160,170,175,180]
plt.hist([x_value,x2_value],bins=bin_num,alpha=0.75,stacked=True)

6. 多类直方图
在使用直方图查看数据频率时,有时需要同时查看多种类型数据出现的频率。
此时,我们可以以列表的形式将多种数据传入hist()方法的x参数中。
x_value = [np.random.randint(140,180,i) for i in [100,200,300]]
plt.hist(x_value,bins=10,edgecolor="r",histtype="bar",alpha=0.5,label=["A公司","B公司","C公司"])

总结: 我们对matplotlib模块中绘制各种直方图的相关属性和方法进行了详细学习。在需要查看数据分布频率时,可以使用hist()方法绘制直方图,同时也可以添加折线来辅助查看。
到此这篇关于Python利用 matplotlib 绘制直方图的文章就介绍到这了,更多相关Python matplotlib 模块内容请搜索本站以前的文章或继续浏览下面的相关文章希望大家以后多多支持本站!
免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。









