使用Python绘制带填充纹理的堆叠图

 更新时间:2025年07月06日 10:36:23   作者:Code_Verse  
在数据分析和可视化中,堆叠条形图是一种非常有用的工具,能够直观地展示不同类别在各个样本中的分布情况,下面我们来看看具体实现方法吧

在数据分析和可视化中,堆叠条形图是一种非常有用的工具,能够直观地展示不同类别在各个样本中的分布情况。而为堆叠图添加填充纹理,则可以让图表更加美观且富有层次感。今天,我们将通过 Python 的 Matplotlib 库来实现这种带填充纹理的堆叠图。

一、安装 Matplotlib 库

在开始绘制图表之前,我们需要确保已经安装了 Matplotlib 库。如果你尚未安装 Matplotlib,可以通过【win】+【R】打开【运行】,并输入[cmd],点击确定,并输入以下命令进行安装:

pip install matplotlib

安装完成后,你就可以在 Python 脚本中导入并使用 Matplotlib 了。

二、数据准备

为了绘制堆叠图,我们需要准备一些数据。在本例中,我们使用一个 JSON 格式的数据结构来存储样本数、RMSE 值以及类别标签。以下是数据的具体格式:

data = {
    "samples": [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13],
    "RMSE_values": [
        [0.15, 0.2, 0.25],
        [0.3, 0.35, 0.3],
        [0.25, 0.3, 0.35],
        [0.2, 0.25, 0.3],
        [0.18, 0.22, 0.28],
        [0.2, 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.2, 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"]
}

其中:

  • samples 表示样本编号。
  • RMSE_values 是一个二维列表,每一行对应一个样本,每一列对应一个类别的值。
  • labels 是类别的标签。

三、设置绘图风格和字体

在绘制图表之前,我们需要设置合适的绘图风格和字体,以确保图表的美观性和可读性。Matplotlib 提供了多种预设的绘图风格,例如 seaborn-v0_8-colorblind,这种风格适合色盲用户,能够提供清晰的视觉效果。

import matplotlib.pyplot as plt

# 检查可用样式
print("Available styles:", plt.style.available)

# 设置绘图风格和字体
plt.style.use('seaborn-v0_8-colorblind')  # 使用可用的样式
plt.rcParams.update({
    'font.family': 'SimHei',  
    'font.size': 10,          
    'axes.unicode_minus': False  
})

四、绘制堆叠条形图并添加纹理

接下来,我们将使用 Matplotlib 的bar方法来绘制堆叠条形图。为了实现纹理填充,我们需要为每个条形图指定 hatch 参数。以下是完整的代码实现:

import numpy as np

# 创建图形和坐标轴对象,调整图形大小为 (10, 6)
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('样本数')  # 设置x轴标签
ax.set_ylabel('RMSE (米)')  # 设置y轴标签
ax.set_title('纹理填充堆叠条形图')  # 设置图表标题为中文
# 添加图例
ax.legend(loc='upper right')  # 设置图例位置
# 设置网格和坐标轴范围
ax.grid(True, axis='y', linestyle='--', alpha=0.7)  # 添加网格线
ax.set_ylim(0, 1.5)  # 设置y轴范围

六、显示和保存图表

最后,我们使用 plt.show() 方法来显示图表。如果需要保存图表,可以使用 plt.savefig() 方法。

# 显示图表
plt.show()
# 关闭绘图窗口
plt.close()

七、效果展示

运行上述代码后,你将得到一个带有填充纹理的堆叠条形图。每个条形图的纹理和颜色都清晰可见,能够直观地展示不同类别在各个样本中的分布情况。

八、完整代码展示

import matplotlib.pyplot as plt
import numpy as np
# 从JSON格式的数据中提取需要绘制的图表信息
data = {
    "samples": [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13],
    "RMSE_values": [
        [0.15, 0.2, 0.25],
        [0.3, 0.35, 0.3],
        [0.25, 0.3, 0.35],
        [0.2, 0.25, 0.3],
        [0.18, 0.22, 0.28],
        [0.2, 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.2, 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"]
}
# 检查可用样式
print("Available styles:", plt.style.available)
# 设置绘图风格和字体
plt.style.use('seaborn-v0_8-colorblind')  # 使用可用的样式
# 设置支持中文的字体
plt.rcParams.update({
    'font.family': 'SimHei',  
    'font.size': 10,          
    'axes.unicode_minus': False  
})
# 创建图形和坐标轴对象,调整图形大小为 (10, 6)
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()

九、总结

通过 Matplotlib,我们可以轻松地实现带填充纹理的堆叠图。这种图表不仅美观,还能提供丰富的信息。在实际应用中,你可以根据需要调整颜色、纹理、字体等参数,以满足不同的可视化需求。

到此这篇关于使用Python绘制带填充纹理的堆叠图的文章就介绍到这了,更多相关Python绘制堆叠图内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Python基础-特殊方法整理详解

    Python基础-特殊方法整理详解

    python中特殊方法(魔术方法)是被python解释器调用的,我们自己不需要调用它们,我们统一使用内置函数来使用。本篇文章将对其详细介绍,感兴趣的小伙伴可以参考下面文章的具体内容
    2021-09-09
  • 一文带你掌握Python中多线程和线程池的使用方法

    一文带你掌握Python中多线程和线程池的使用方法

    Python中的多线程和线程池是其强大的功能之一,可以让我们更加高效地利用CPU资源,提高程序的运行速度。本文将介绍Python中多线程和线程池的使用方法,并提供一些实用的案例供读者参考
    2023-04-04
  • Python集成开发环境pycharm配置git的实现步骤

    Python集成开发环境pycharm配置git的实现步骤

    本文主要介绍了Python集成开发环境pycharm配置git的实现步骤,文中通过图文的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2024-05-05
  • Appium+Python自动化测试之运行App程序示例

    Appium+Python自动化测试之运行App程序示例

    这篇文章主要介绍了Appium+Python自动化测试之运行App程序示例,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2019-01-01
  • Python Black代码格式化终极指南

    Python Black代码格式化终极指南

    Black是一款自动化的Python代码格式化工具,旨在通过强制一致的代码格式来提高代码的可读性和维护性,本文将深入探讨Black的使用方法、高级特性以及与其他格式化工具的比较,帮助你更好地理解并成功应用Black在你的项目中
    2024-01-01
  • Python时间操作之pytz模块使用详解

    Python时间操作之pytz模块使用详解

    在学习Python过程中,我们已经了解了一些关于时间操作的库,如:Python内置库:time,datatime和第三方库:dateutil,pytz等。本文将详细讲讲pytz模块的使用,需要的可以参考一下
    2022-06-06
  • python利用WordCloud模块实现词云绘制

    python利用WordCloud模块实现词云绘制

    wordcloud是词云绘图模块,封装了WordCloud词云类,是词云的基本载体,下面小编就来和大家详细讲讲如何利用WordCloud模块实现词云绘制吧,希望对大家有所帮助
    2023-10-10
  • pytorch 如何自定义卷积核权值参数

    pytorch 如何自定义卷积核权值参数

    这篇文章主要介绍了pytorch 自定义卷积核权值参数的操作,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-05-05
  • Django中使用ModelForm生成HTML标签的方法步骤

    Django中使用ModelForm生成HTML标签的方法步骤

    在 Django 中,使用 ModelForm 来生成 HTML 表单标签是一种常见且高效的做法,本文主要介绍了Django中使用ModelForm生成HTML标签的方法步骤,感兴趣的可以了解一下
    2024-01-01
  • Python from import导包ModuleNotFoundError No module named找不到模块问题解决

    Python from import导包ModuleNotFoundError No module named

    最近在执行python脚本时,from import的模块没有被加载进来,找不到module,这篇文章主要给大家介绍了关于Python from import导包ModuleNotFoundError No module named找不到模块问题的解决办法,需要的朋友可以参考下
    2022-08-08

最新评论