Matplotlib 子图2025年1月7日 | 阅读 8 分钟 引言借助 Matplotlib 子图,您可以构建包含单个父项的复杂多面板可视化。子图在 Matplotlib 的后期版本中被纳入,它们通过允许将多个轴组合到单独的子图中,为比已知子图更灵活的选择提供了更灵活的替代方案,每个子图都有独特的格式和自定义机会。在构建仪表板、报告或任何其他需要将多个图组合在一起但保持其独立格式和外观的可视化表示时,这非常有用。 特别是当结合多种绘图类型或需要在单个父项中保留不同大小和标签时,子图可以帮助您更有效地管理布局。由于它们可以分层,因此可以创建比仅使用子图更难实现的复杂设计。子图结构还可以更好地控制分离、标题和通用轴,这有助于创建适合发布的视觉效果。 无论您是在处理数据科学项目、撰写学术论文,还是仅仅试图将多个图有条理地组织起来,Matplotlib 子图都为您提供了创建有组织且美观的图表所需的工具。 子图的基本结构Figure 和 SubFigure 类提供了 Matplotlib 子图架构的基础。要有效地使用子图,理解这些组件及其交互至关重要。 - Figure
在 Matplotlib 中,Figure 类充当所有绘图组件的最高级容器。它充当主要画布,并在其上组织多个子图和子图。您也可以使用 plt.Figure() 或 plt.Subplots() 来构建一个 Figure。Figure 中可以存在多个 SubFigure 对象,每个对象充当一组绘图的独立容器。 您也可以使用 plt.Figure() 或 plt.Subplots() 来构建一个 Figure。一个 Figure 中可以存在多个 SubFigure 对象,每个对象充当一组绘图的独立容器。 - 子图
SubFigure 类是 Matplotlib 的一个较新添加项,旨在在一个 Figure 中容纳一组独立的轴、位置和其他绘图组件。可以通过拆分 Figure 或另一个 SubFigure 来创建它。 调用 Figure 对象上的 subfigures() 函数将生成一个 SubFigure。通过使用此方法,您可以确定子图布局的列数和行数以及其他方面。 一个单独的 Figure 可以拥有嵌套在其内部的多层绘图,因为每个 SubFigure 都可以容纳自己的子图。 - 子图内的轴
您可以使用 add_subplot() 和 add_axes() 方法将 Axes 对象添加到每个 SubFigure。实际数据将显示在这些轴上。 可以单独为不同子图中的轴应用不同的比例、名称和样式。 - 布局和放置
在创建子图时,定义网格结构决定了子图如何在父项内进行组织。一种方法是通过指定父维度百分比来手动指定放置,或者通过使用行和列规范来实现。 此外,您可以调整子图之间的间距,以避免重叠并确保显示整洁、布局良好。
创建子图:综合指南步骤 1:导入库。 使用 Matplotlib 子图的第一步是导入所需的模块。在大多数 Python 环境中,Matplotlib 已经预装,您只需要通过一个简单的 import 语句导入它。通过这样做,您可以确保您有权使用构建和处理子图所需的所有类和函数。 步骤 2:设置图 Figure 对象是您需要的第一个结构化组件。它充当您可视化的主要画布,子图和子图最终将在其上呈现。为了确保 Figure 有足够的空间用于您的子图,您可以在初始化时指定 Figure 的整体尺寸。 步骤 3:创建子图 创建父项后,您可以使用 subfigures() 函数将其拆分为多个子图。您也可以通过使用此技术选择所需的子图行数和列数。例如,要创建并排放置的子图,需要指定一行两列。在父项内,每个子图都充当一个独立的容器。 步骤 4:将子图转换为子图 您也可以在每个子图中创建用于显示数据的子图。使用 add_subplot() 函数,您可以将单个轴添加到子图中以创建子图。这是实际数据图形化将发生的地方,因此这是一个重要的步骤。 步骤 5:数据绘图 创建子图后,您就可以在这些轴上绘制数据了。可以在子图内的每个子图中显示不同的数据或图像样式。在此阶段,您将输入数据点并选择要使用的可视化类型,例如散点图、条形图或折线图。 步骤 6:利用子图 您可以通过自定义来更改每个子图的外观和布局。可以为每个子图添加自己的标签、标题和其他装饰性元素。这有助于在单个 Figure 内创建独立且易于理解的可视化。 步骤 7:调整布局 使用布局调整函数来确保您的子图和子图排列整齐且不重叠。通过自动调整间距和对齐,这些操作可确保每个部分都完美地适合父项。 步骤 8:呈现故事线 最后一步是渲染包含其子图和子图的父项。这是通过呈现图来完成的,它使您能够在一个 Figure 中看到所有已组织和自定义的可视化。 高级子图布局通过创建高级子图布局,您可以创建更复杂且组织良好的可视化,尤其是在处理多种数据类型或复杂的绘图需求时。以下是一些创建复杂布局的思路和技术。 - 链接子图
通过将子图嵌套在彼此内部,可以创建分层结构。当您想要在整体范围内保持离散的部分,同时将某些绘图组合在一起时,这非常有用。例如,一个用于多个数据类别的最高级别子图可能包含用于每个类别详细分析的单独一组子图。 用例:显示各种数据集特征,包括堆叠子图中的不同绘图和单个子图中的摘要数据。 - 利用 GridSpec 进行自定义布局
使用 Matplotlib 中的 GridSpec 类,您可以通过定义每个子图和子图的正确位置和尺寸来轻松设计特定的布局。GridSpec 使您能够调整网格中的列数和行数以及分配给每个子图的空间量。 示例:使用具有不同大小的多个列和行的网格,您可以设计一个布局,左侧有一个大图,右侧堆叠许多小图。 - 整合子图和子图
您可以在单个 Figure 中组合子图和子图,以创建更独特结构。例如,您可以使用子图来分析每个子图内的不同数据集,并使用子图来划分可视化的不同区域。 用例:一个包含多个相关图表(包括客户人口统计信息和销售数据)的仪表板。 - 特定对齐和间距
为了防止重叠并确保每个部分都易于访问,调整子图和子图之间的间距和对齐至关重要。Matplotlib 提供调整间距、填充和边距的操作,包括 plt.Subplots_adjust() 和 subfig.Tight_layout()。 建议:调整子图和子图之间的间距,以在可读性和空间利用率之间取得平衡。 - 复杂的多面板图形
在科学论文中提供包含多个相关图的多面板图是常见的做法。通过使用子图,您可以将这些分组保持独立,同时仍然是统一 Figure 的一部分。可以为不同的实验实例或数据类别提供具有不同布局和模式的子图。 用例:一个科学图,显示多个实验,每个实验都是更广泛父项的一部分,但具有独立的数据和轴。 - 尺寸控制和纵横比
当您的数据需要特定比例时,控制每个子图和子图的组件纵横比和尺寸至关重要。每个子图都可以选择不同的纵横比,这样您就可以确保数据得到良好显示,并且不会失真。 用例:绘制图表或图像,其中保持正确的纵横比很重要。 - 动态和交互式布局
交互式应用程序的高级布局具有响应用户输入的动态功能。子图适用于用户需要以视觉方式查看数据的场景,因为它们可以实时修改、缩放或重新排列。 用例:数据探索工具,当您选择新数据或应用过滤器时,其布局会发生变化。
用例和实际示例- 数据仪表板
子图非常适合在数据仪表板上一起显示多个相关图。例如,在会计仪表板中可以使用子图来显示市场指标、交易量和股票价格,每个都在其自己的子图中。这种组织保持了数据的结构和分析的简便性。 - 比较评估
子图可以让您并排显示多个数据集或模型之间的比较。例如,您可以绘制多个机器学习模型的可靠性、准确性和召回率在不同的子图中,以评估它们的性能。因此,更容易识别差异并得出结论。 - 多部分科学图
在科学论文中,在一张图中显示多个相关实验是常见做法。这些实验可以通过子图分组到具有不同图的面板中。例如,您可以为每个实验情况包含一个子图,显示不同处理或时间段的结果。 - 链接图像
一张图可以包含子图,每个子图可以有额外的子图,以构建嵌套的可视化。当检查多层人工神经网络或分层数据结构时,例如,其中每个层或级别都可以单独突出显示,这在复杂的硬数据分析设置中很有用。 - 带图像的报告
子图可以将相关的可视化放在一起,有助于在学术和公司报告中进行内容组织。例如,可以使用每个具有独立视觉风格和尺寸的子图来划分人口统计数据和市场研究报告中的收入趋势。这使得研究更容易阅读,也更具学术性。 - 吸引人的应用程序
在使用 PyQt 或 Tkinter 等框架创建交互式应用程序时,子图允许构建复杂、动态的视觉界面。由于每个子图都可以单独更新或修改,因此更容易集成交互式元素,如缩放、平移和根据用户输入动态更新的绘图。 - 教学资源
子图可以在教育材料中使用,以直接展示概念的各个方面。例如,在教授数学概念时,可以使用子图来并排展示多个函数或变换,帮助学生理解不同部分如何相互关联。
|