8.绘制统计图形——直方图

本文介绍了Python使用matplotlib库绘制直方图的基本原理和方法,包括柱状图与直方图的区别,以及如何创建堆积直方图以比较不同数据集的分布。示例代码展示了如何绘制连续型数据的分布,如考试成绩,并通过堆积直方图对比不同班级的成绩差异。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


直方图主要是应用在定量数据的可视化场景中,后者用来进行连续型数据的可视化展示。比如公共英语考试分数的区间分布、抽样调查中的人均寿命的分布特征以及居民可支配收入的分布特征。

1.绘制原理

import matplotlib as mpl
import matplotlib.pyplot as plt
import numpy as np

mpl.rcParams["font.sans-serif"]=["SimHei"]
mpl.rcParams["axes.unicode_minus"]=False

# set test scores
scoresT = np.random.randint(0,100,100)

x = scoresT

# plot histogram
bins = range(0,101,10)

plt.hist(x,bins=bins,
         color="#377eb8",
         histtype="bar",
         rwidth=1.0,
         edgecolor="#000000")
# set x,y-axis label
plt.xlabel("测试成绩")
plt.ylabel("学生人数")

plt.show()

在这里插入图片描述

plt.hist(x,bins=bins,
         color="#377eb8",
         histtype="bar",
         rwidth=1.0,
         edgecolor="#000000")
x:连续型数据输入值
bins:用于确定柱体的个数或是柱体边缘范围
color:柱体颜色
histype:柱体类型
label:图例内容
rwidth:柱体的相对宽度,取值范围是[0.0,1.0]

2.柱状图和直方图的关系

一、直方图描述的是连续型数据的分布,柱状图描述的是离散型数据的分布,也可以说一个是描述定量数据,一个是描述定性数据。
二、从展示效果来看,柱状图的柱体之间有空隙,直方图的柱体之间没有空隙。

3.堆积直方图

import matplotlib as mpl
import matplotlib.pyplot as plt
import numpy as np

mpl.rcParams["font.sans-serif"]=["SimHei"]
mpl.rcParams["axes.unicode_minus"]=False

# set test scores
scoresT1 = np.random.randint(0,100,100)
scoresT2 = np.random.randint(0,100,100)

x = [scoresT1,scoresT2]
colors = ["#8dd3c7","#bebada"]
labels = ["班级A","班级B"]

# plot histogram
bins = range(0,101,10)

plt.hist(x,bins=bins,
         color=colors,
         histtype="bar",
         rwidth=1.0,
         stacked=True,
         label=labels,
         edgecolor="#000000")

# set x,y-axis label
plt.xlabel("测试成绩")
plt.ylabel("学生人数")

plt.title("不同班级的测试成绩的直方图")

plt.legend(loc="upper left")

plt.show()

在这里插入图片描述
通过向函数hist()传递关键字参数stacked来实现堆积直方图的绘制任务。通过绘制堆积直方图,就可以直观的观察两个班级学生在测试中考试成绩分布特点和知识掌握情况的差异。如果不绘制堆积直方图,可以通过绘制并排放置的直方图,即“stacked=False”。


```python
import matplotlib as mpl
import matplotlib.pyplot as plt
import numpy as np

mpl.rcParams["font.sans-serif"]=["SimHei"]
mpl.rcParams["axes.unicode_minus"]=False

# set test scores
scoresT1 = np.random.randint(0,100,100)
scoresT2 = np.random.randint(0,100,100)

x = [scoresT1,scoresT2]
colors = ["#8dd3c7","#bebada"]
labels = ["班级A","班级B"]

# plot histogram
bins = range(0,101,10)

plt.hist(x,bins=bins,
         color=colors,
         histtype="bar",
         rwidth=0.8,
         stacked=False,
         label=labels,
         edgecolor="#000000")

# set x,y-axis label
plt.xlabel("测试成绩")
plt.ylabel("学生人数")

plt.title("不同班级的测试成绩的直方图")

plt.legend(loc="upper left")

plt.show()
![在这里插入图片描述](https://img-blog.csdnimg.cn/cb4a6ce18ac6437cb0842799e4882377.png#pic_center)
# 4.直方图的不同形状——堆积阶梯型直方图

```python
import matplotlib as mpl
import matplotlib.pyplot as plt
import numpy as np

mpl.rcParams["font.sans-serif"]=["SimHei"]
mpl.rcParams["axes.unicode_minus"]=False

# set test scores
scoresT1 = np.random.randint(0,100,100)
scoresT2 = np.random.randint(0,100,100)

x = [scoresT1,scoresT2]
colors = ["#8dd3c7","#bebada"]
labels = ["班级A","班级B"]

# plot histogram
bins = range(0,101,10)

plt.hist(x,bins=bins,
         color=colors,
         histtype="stepfilled",
         rwidth=0.8,
         stacked=True,
         label=labels,)

# set x,y-axis label
plt.xlabel("测试成绩")
plt.ylabel("学生人数")

plt.title("不同班级的测试成绩的直方图")

plt.legend()

plt.show()

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值