Python Matplotlib绘制带填充纹理堆叠图实战指南

阿麦
阿麦
发布时间:2026-10-10| 2人浏览过
原创

在数据分析报告中,通过为堆叠条形图添加填充纹理可以显著提升不同类别的可辨识度。本文详细演示如何利用 Python 的 Matplotlib 库,结合 hatches 参数与颜色映射,快速生成支持中文显示、带有复杂纹理叠加的专业统计图表。

环境准备与数据构建

执行代码前需确保本地已安装 matplotlib 与 numpy。若未配置,可在终端运行:

pip install matplotlib numpy

图表的数据结构建议采用字典嵌套列表的形式,明确区分横轴分类标识、各样本的分项数值以及图例名称。本示例模拟了13个样本下三类指标的误差(RMSE)分布:

import numpy as np

data = {
    "samples": list(range(1, 14)),
    "RMSE_values": [
        [0.15, 0.20, 0.25], [0.30, 0.35, 0.30], [0.25, 0.30, 0.35],
        [0.20, 0.25, 0.30], [0.18, 0.22, 0.28], [0.20, 0.24, 0.29],
        [0.22, 0.26, 0.31], [0.19, 0.23, 0.32], [0.17, 0.21, 0.33],
        [0.16, 0.20, 0.34], [0.14, 0.19, 0.35], [0.13, 0.18, 0.36],
        [0.12, 0.17, 0.37]
    ],
    "labels": ["A", "B", "C", "D"]
}

配置绘图风格与字体

为避免默认英文字体导致的中文乱码,并适配色觉障碍用户的阅读习惯,初始化时应调用内置的无障碍配色方案:

import matplotlib.pyplot as plt

# 启用适合色盲群体的视觉风格
plt.style.use('seaborn-v0_8-colorblind')

# 强制设定全局中文字体并关闭负号 Unicode 转换
plt.rcParams.update({
    'font.family': 'SimHei',
    'font.size': 10,
    'axes.unicode_minus': False
})

核心操作:循环绘制带纹理堆叠图

第1步:初始化画布与属性映射

创建一个宽度为10英寸、高度为6英寸的 Axes 对象。同时定义颜色序列与 Hatch 纹理代码。Hatch 机制通过在色块内叠加指定的线条图案来区分重叠区域,避免依赖单纯的颜色差异。

# 创建画布
fig, ax = plt.subplots(figsize=(10, 6))

# 定义前景色与对应的填充图案 (单线、双线交叉、反向斜线)
colors = ['navy', 'teal', 'mediumaquamarine', 'khaki']
hatches = ['xx', '', '\\', '//']

第2步:遍历数据执行堆叠绘制

利用 bottom 变量实时追踪当前栈顶高度。在循环体内提取对应列的样本值,传入 ax.bar() 接口并挂载 hatch 属性。渲染完毕后累加该层数值以供上层覆盖。

bottom = np.zeros(len(data["samples"]))

for i, label in enumerate(data["labels"]):
    if i < 3:  # 仅渲染前三个有效列,防止索引越界
        col_values = [row[i] for row in data["RMSE_values"]]
        bars = ax.bar(
            data["samples"], col_values, bottom=bottom,
            color=colors[i], hatch=hatches[i], label=label,
            edgecolor='black', width=0.6
        )
        bottom += col_values

完善图表元素与显示保存

完成基础图形渲染后,必须补充坐标轴说明、网格参考线以及布局边界控制,以确保导出文件可直接用于学术或商业报告:

# 绑定轴标签与页面主标题
ax.set_xlabel('样本数')
ax.set_ylabel('RMSE (米)')
ax.set_title('纹理填充堆叠条形图')

# 放置图例至右上角
ax.legend(loc='upper right')

# 开启Y轴虚线网格并将刻度上限控制在1.5以内
ax.grid(True, axis='y', linestyle='--', alpha=0.7)
ax.set_ylim(0, 1.5)

随后通过标准接口输出预览窗口或直接调用磁盘写入功能:

# plt.savefig('stacked_hatched_bar.png', dpi=300, bbox_inches='tight')
plt.show()
plt.close(fig)
带有XX交叉、空白及右斜线纹理的三色堆叠柱状图,横轴标注样本编号,纵轴标注RMSE数值
生成的堆叠条形图清晰展示了三项指标在不同样本下的累计幅度,纹理有效辅助了图例识别。

完整代码汇总

import matplotlib.pyplot as plt
import numpy as np

data = {
    "samples": list(range(1, 14)),
    "RMSE_values": [
        [0.15, 0.20, 0.25], [0.30, 0.35, 0.30], [0.25, 0.30, 0.35],
        [0.20, 0.25, 0.30], [0.18, 0.22, 0.28], [0.20, 0.24, 0.29],
        [0.22, 0.26, 0.31], [0.19, 0.23, 0.32], [0.17, 0.21, 0.33],
        [0.16, 0.20, 0.34], [0.14, 0.19, 0.35], [0.13, 0.18, 0.36],
        [0.12, 0.17, 0.37]
    ],
    "labels": ["A", "B", "C", "D"]
}

plt.style.use('seaborn-v0_8-colorblind')
plt.rcParams.update({
    'font.family': 'SimHei', 
    'font.size': 10,          
    'axes.unicode_minus': False  
})

fig, ax = plt.subplots(figsize=(10, 6))
colors = ['navy', 'teal', 'mediumaquamarine', 'khaki']
hatches = ['xx', '', '\\', '//']  

bottom = np.zeros(len(data["samples"]))  

for i, label in enumerate(data["labels"]):
    if i < 3:  
        values = [item[i] for item in data["RMSE_values"]]
        bars = ax.bar(data["samples"], values, bottom=bottom, color=colors[i], hatch=hatches[i], label=label, edgecolor='black', width=0.6)
        bottom += values  

ax.set_xlabel('样本数')  
ax.set_ylabel('RMSE (米)')  
ax.set_title('纹理填充堆叠条形图')  
ax.legend(loc='upper right')  
ax.grid(True, axis='y', linestyle='--', alpha=0.7)  
ax.set_ylim(0, 1.5)  

plt.show()
plt.close(fig)

效果验证与总结

运行上述脚本后,控制台将弹出包含密集阴影条纹叠加的立体柱状面板。每个数据切片均独立着色并以特定斜率排布的几何线条填充,彻底解决了传统纯色堆叠图在黑白打印或投影时层次混淆的问题。在实际工程调度或业务复盘场景里,开发者只需替换字典内的数值矩阵并微调 width 间距即可无缝迁移至新项目。以上就是使用Python配合Matplotlib库绘制带填充纹理的堆叠图的详细内容,更多关于Python数据可视化技巧的资料请关注本站其它相关文章!

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。