一周学会Matplotlib3 Python 数据可视化-绘制面积图(Area)
锋哥原创的Matplotlib3 Python数据可视化视频教程:
2026版 Matplotlib3 Python 数据可视化 视频教程(无废话版) 玩命更新中~_哔哩哔哩_bilibili
课程介绍
本课程讲解利用python进行数据可视化 科研绘图-Matplotlib,学习Matplotlib图形参数基本设置,绘图参数及主要函数,以及Matplotlib基础绘图,和Matplotlib高级绘图。
绘制面积图(Area)
面积图是数据可视化中常用的图表类型,用于展示数据随时间或类别的变化趋势,特别适合表现多个数据系列的累积关系。下面我将详细介绍如何使用 Matplotlib 绘制面积图。
面积图其实是特殊的折线图,只不过是通过plt.fill_between()方法,填充两条曲线之间区域。
plt.fill_between()
是 Matplotlib 中用于填充两条曲线之间区域的函数,常用于可视化置信区间、误差范围或阈值区域。以下是详细解析:
plt.fill_between(x, # x轴坐标值(数组)y1, # 第一条曲线的y值(数组)y2=0, # 第二条曲线的y值(数组或标量,默认为0)where=None, # 条件筛选(布尔数组)interpolate=False, # 是否在交点插值step=None, # 阶梯填充模式('pre'/'post'/'mid')alpha=None, # 透明度(0-1)color=None, # 填充颜色**kwargs # 其他Polygon属性(如hatch, edgecolor)
)
我们来看一个基本示例:
import matplotlib.pyplot as plt
import numpy as np# 设置中文字体支持
plt.rcParams['font.sans-serif'] = ['SimHei'] # 用来正常显示中文标签
plt.rcParams['axes.unicode_minus'] = False # 用来正常显示负号# 创建数据
x = np.linspace(0, 10, 100)
y = np.sin(x) * 0.5 + 1 # 正弦波偏移# 创建图形
plt.figure(figsize=(10, 6))
plt.fill_between(x, y, color="skyblue", alpha=0.4) # 填充区域
plt.plot(x, y, color="Slateblue", alpha=0.6, linewidth=2) # 绘制线条# 添加标题和标签
plt.title('基本面积图: 正弦波', fontsize=14, fontweight='bold')
plt.xlabel('时间', fontsize=12)
plt.ylabel('数值', fontsize=12)
plt.grid(True, linestyle='--', alpha=0.7)plt.tight_layout()
plt.show()
我们也可以用plt.stackplot()方法来绘制堆叠面积图,堆叠面积图用于展示多个数据系列的累积关系,每个系列堆叠在前一个系列之上。
plt.stackplot()
是 Matplotlib 中用于创建堆叠面积图的函数,特别适合展示多个数据序列随时间的累积变化以及各部分的比例关系。以下是详细解析:
plt.stackplot(x, # x轴坐标值(数组)*args, # 多个y值序列(每个序列代表一个堆叠层)labels=(), # 各层的标签(用于图例)colors=None, # 各层的颜色baseline='zero', # 基线模式('zero', 'sym', 'wiggle', 'weighted_wiggle')**kwargs # 其他Polygon属性(alpha, edgecolor等)
)
我们来看一个堆叠面积示例:
import matplotlib.pyplot as plt
import numpy as np# 设置中文字体支持
plt.rcParams['font.sans-serif'] = ['SimHei'] # 用来正常显示中文标签
plt.rcParams['axes.unicode_minus'] = False # 用来正常显示负号# 创建数据
x = np.arange(0, 10, 0.1)
y1 = np.sin(x) * 0.5 + 1
y2 = np.cos(x) * 0.3 + 0.5
y3 = np.exp(-x / 5) * 1.5# 创建图形
plt.figure(figsize=(10, 6))# 使用stackplot绘制堆叠面积图
plt.stackplot(x, y1, y2, y3,colors=['#FF9999', '#66B2FF', '#99FF99'],alpha=0.8,labels=['产品A', '产品B', '产品C'])# 添加标题和标签
plt.title('产品销售额堆叠面积图', fontsize=14, fontweight='bold')
plt.xlabel('季度', fontsize=12)
plt.ylabel('销售额 (百万)', fontsize=12)
plt.legend(loc='upper left', fontsize=10)
plt.grid(True, linestyle='--', alpha=0.5)plt.tight_layout()
plt.show()
运行效果: