Matplotlib 面积图

Matplotlib 面积图函数

面积图是一种随时间变化而改变范围的图标,它主要是强调数量与时间的关系。比如将企业每个月销售额绘制成面积图,然后我们可以很直观地看出每个月销售情况,并且整个面积图所占的范围累计就是年销售额。

面积图

在 Matplotlib 中,我们可以使用 stackplot() 函数来绘制一个面积图。

语法:

plt.stackplot(x, y)

说明:

参数 x 存放的是所有点的 x 轴坐标,参数 y 存放的是所有点的 y 轴坐标,它们可以是列表数组、Series 等。

示例 1:Matplotlib 绘制面积图

import matplotlib.pyplot as plt

# 绘图
x = [2016, 2017, 2018, 2019, 2020]
y = [74, 182.7, 490, 99, 198]
plt.stackplot(x, y)

# 显示
plt.show()

运行之后,效果如下图所示。

Matplotlib绘制面积图1

示例 2:Matplotlib 绘制堆叠面积图(多组数据)

import matplotlib.pyplot as plt

# 设置
plt.rcParams['font.family'] = ['SimHei', 'PingFang SC']
plt.rcParams['axes.unicode_minus'] = False

# 绘图数据
x = [2021, 2022, 2023, 2024, 2025]
y1 = [20, 40, 30, 50, 60]    # 产品 A 的销量
y2 = [30, 50, 40, 60, 70]    # 产品 B 的销量
y3 = [10, 20, 15, 25, 30]    # 产品 C 的销量

# 绘制堆叠面积图(可以传入 labels 用于显示图例)
plt.stackplot(x, y1, y2, y3, labels=['产品A', '产品B', '产品C'], alpha=0.8)

# 添加图例
plt.legend(loc='upper left')

# 定义标题
plt.title('各产品销量堆叠面积图')

# 显示
plt.show()

运行之后,效果如下图所示。

Matplotlib绘制面积图2

分析:

在这个例子中,我们将 y1、y2、y3 依次传入 stackplot() 中。Matplotlib 会先绘制 y1 的面积,然后在 y1 的基础上叠加绘制 y2 的面积,最后叠加 y3。

最顶部的轮廓线代表的就是这三款产品销量的总和。然后结合 labels 和 plt.legend(),我们可以很清晰地对不同色块进行区分。

Matplotlib 面积图案例

在当前项目下的 data 文件夹中有一个 sale.csv 文件,项目结构如下图所示。其中,sale.csv 文件保存的某公司 2020 年每个月的销售总额(单位:万元),内容如下图所示。

Matplotlib面积图的项目结构

sale.csv中的数据

示例 3:Matplotlib 面积图的应用

import pandas as pd
import matplotlib.pyplot as plt

# 设置
plt.rcParams['font.family'] = ['SimHei', 'PingFang SC'] 
plt.rcParams['axes.unicode_minus'] = False

# 读取数据
df = pd.read_csv('data/sale.csv')
# 绘制图表
plt.stackplot(df['月份'], df['总额'])

# 定义标题
plt.title('公司销售总额(面积图)')
plt.xlabel('月份', loc='right')
plt.ylabel('销售额(万元)', loc='top')
# 刻度标签
dates = [str(i)+'月' for i in df['月份']]
plt.xticks(df['月份'], dates)
# 刻度范围
plt.ylim(100, 700)
# 注释文本
for a, b in zip(df['月份'], df['总额']):
    plt.text(a, b, b, color='red', fontsize=12, ha='center', va='bottom')

# 显示
plt.show()

运行之后,效果如下图所示。

Matplotlib面积图的实际应用

Matplotlib 堆积面积图

在实际开发中,某些情况下,基本的面积图并不能满足实际需求。所以我们还得掌握一些高级面积图的绘制,常见的只有堆叠面积图这一种。

示例 4:Matplotlib 绘制堆叠面积图

import matplotlib.pyplot as plt

# 绘制
x = [1, 2, 3, 4, 5]
y1 = [5, 8, 7, 6, 8]
y2 = [3, 7, 6, 5, 7]
y3 = [2, 6, 4, 3, 5]
plt.stackplot(x, y1, y2, y3)

# 显示
plt.show()

运行之后,效果如下图所示。

Matplotlib绘制堆叠面积图

分析:

对于堆叠面积图来说,不同的面积图的 x 轴坐标要求是相同的。

上一篇: Matplotlib 阶梯图

下一篇: Matplotlib 棉棒图

给站长反馈

绿叶网正在不断完善中,小伙伴们如果发现任何问题,还望多多给站长反馈,谢谢!

邮箱:lvyenet@vip.qq.com

「绿叶网」服务号
绿叶网服务号放大
关注服务号,微信也能看教程。
绿叶网服务号