【Python】【Matplotlib】fig, ax = plt.subplots() 返回的fig和ax是什么?

【Python】【Matplotlib】fig, ax = plt.subplots() 返回的fig和ax是什么?

🌈 个人主页:高斯小哥

🔥 高质量专栏:Matplotlib之旅:零基础精通数据可视化、Python基础【高质量合集】、PyTorch零基础入门教程👈 希望得到您的订阅和支持~

💡 创作高质量博文(平均质量分92+),分享更多关于深度学习、PyTorch、Python领域的优质内容!(希望得到您的关注~)


🌵文章目录🌵

  • 📊 一、fig和ax简介
  • 🖼️ 二、fig的用法
      • 设置图形大小
      • 设置图形标题
      • 保存图形
      • 显示图形
      • 📈 三、ax的用法
          • 绘制图形
          • 设置坐标轴标签和刻度
          • 设置坐标轴范围
          • 添加图例
          • 完整代码
          • 🎨 四、多个子图
          • 🔍 五、fig和ax的交互
              • 使用 fig.add_axes() 添加 Axes 对象
              • 使用 ax.figure 获取所属的 Figure 对象
              • 共享坐标轴
              • 🎭 六、fig和ax的进一步定制
                  • 自定义颜色、线条样式和标记
                  • 添加网格、边框和背景色
                  • 🤝七、期待与你共同进步
                  • 🎉 结语
                  • 🔍 关键词

                    📊 一、fig和ax简介

                      在Matplotlib库中,fig, ax = plt.subplots() 是一个常用的函数,用于创建一个新的图形窗口以及一个或多个子图。返回的 fig 和 ax 对象分别代表了整个图形和其中的一个子图。fig 是 Figure 类的实例,代表整个绘图窗口,而 ax 是 Axes 类的实例,代表其中的一个子图或坐标轴。

                      通过 fig 和 ax,我们可以方便地对整个图形和子图进行各种操作,比如设置标题、坐标轴标签、刻度等。

                    🖼️ 二、fig的用法

                    fig 对象提供了许多方法和属性,用于控制整个图形的外观和行为。以下是一些常用的用法:

                    设置图形大小

                    可以通过 figsize 参数在创建图形时设置其大小(宽和高,单位为英寸)。

                    import matplotlib.pyplot as plt
                    fig, ax = plt.subplots(figsize=(8, 6))
                    

                    设置图形标题

                    使用 suptitle() 方法可以为整个图形设置标题。

                    fig.suptitle('My Title', fontsize=14)
                    

                    保存图形

                    使用 savefig() 方法可以将整个图形保存为图片文件。

                    fig.savefig('my_figure.png')
                    

                    显示图形

                    通过 plt.show() 可以显示整个图形。

                    plt.show()
                    

                    📈 三、ax的用法

                    ax 对象代表了图形中的一个子图,它提供了丰富的接口用于绘制图形和设置坐标轴属性。

                    绘制图形

                    使用 ax 对象的方法可以直接在子图上绘制各种图形,如折线图、散点图等。

                    import numpy as np
                    x = np.linspace(0, 10, 100)
                    y = np.sin(x)
                    fig, ax = plt.subplots()
                    ax.plot(x, y)
                    

                    设置坐标轴标签和刻度

                    使用 set_xlabel(), set_ylabel(), set_xticks(), set_yticks() 等方法可以设置坐标轴的标签和刻度。

                    ax.set_xlabel('X-axis')
                    ax.set_ylabel('Y-axis')
                    ax.set_xticks(np.arange(0, 11, 2))
                    ax.set_yticks([-1, 0, 1])
                    

                    设置坐标轴范围

                    使用 set_xlim() 和 set_ylim() 方法可以设置坐标轴的范围。

                    ax.set_xlim(0, 10)
                    ax.set_ylim(-1.5, 1.5)
                    

                    添加图例

                    如果在一个子图上绘制了多个图形,可以使用 legend() 方法添加图例。

                    ax.plot(x, np.sin(x), label='sin(x)')
                    ax.plot(x, np.cos(x), label='cos(x)')
                    ax.legend()
                    

                    完整代码

                    import numpy as np
                    import matplotlib.pyplot as plt
                    x = np.linspace(0, 10, 100)
                    y = np.sin(x)
                    fig, ax = plt.subplots()
                    ax.plot(x, y)
                    ax.set_xlabel('X-axis')
                    ax.set_ylabel('Y-axis')
                    ax.set_xticks(np.arange(0, 11, 2))
                    ax.set_yticks([-1, 0, 1])
                    ax.set_xlim(0, 10)
                    ax.set_ylim(-1.5, 1.5)
                    ax.plot(x, np.sin(x), label='sin(x)')
                    ax.plot(x, np.cos(x), label='cos(x)')
                    ax.legend()
                    plt.show()
                    

                    🎨 四、多个子图

                      plt.subplots() 函数还可以用于创建包含多个子图的图形。通过指定 nrows 和 ncols 参数,可以定义子图的行数和列数。

                    import numpy as np
                    import matplotlib.pyplot as plt
                    x = np.linspace(0, 10, 100)
                    fig, axs = plt.subplots(nrows=2, ncols=2)
                    # axs 是一个 2x2 的数组,每个元素都是一个 Axes 对象
                    axs[0, 0].plot(x, np.sin(x))
                    axs[0, 1].plot(x, np.cos(x))
                    axs[1, 0].plot(x, np.tan(x))
                    axs[1, 1].plot(x, 1/x)
                    plt.show()
                    

                    在这个例子中,axs 是一个 2x2 的 NumPy 数组,每个元素都是一个 Axes 对象,代表图形中的一个子图。我们可以通过索引 axs[i, j] 来访问和操作特定的子图。

                    🔍 五、fig和ax的交互

                      fig 和 ax 对象之间也有一些交互。例如,我们可以通过 fig.add_axes() 方法手动向图形中添加一个 Axes 对象,或者通过 ax.figure 属性获取一个 Axes 对象所属的 Figure 对象。

                    下面,我们将深入探讨 fig 和 ax 之间的交互,并通过示例代码展示如何使用它们来创建更复杂的图形布局和交互。

                    使用 fig.add_axes() 添加 Axes 对象

                      虽然 plt.subplots() 是一种非常方便的创建子图的方法,但有时我们可能需要更灵活地控制子图的位置和大小。这时,可以使用 fig.add_axes() 方法来手动添加 Axes 对象。

                    import matplotlib.pyplot as plt
                    # 创建一个图形对象
                    fig = plt.figure()
                    # 使用 add_axes() 方法添加 Axes 对象
                    # 参数是一个四元组,表示子图在图形中的位置(左下角 x, 左下角 y, 宽度, 高度)
                    # 这些值都是相对于图形大小的分数
                    ax1 = fig.add_axes([0.1, 0.1, 0.8, 0.8])
                    # 在第一个 Axes 对象上绘制图形
                    ax1.plot([1, 2, 3, 4], [1, 4, 2, 3])
                    # 还可以继续添加更多的 Axes 对象
                    ax2 = fig.add_axes([0.2, 0.5, 0.4, 0.3])
                    ax2.plot([1, 2, 3, 4], [4, 3, 2, 1])
                    # 显示图形
                    plt.show()
                    

                    在上面的代码中,我们手动指定了每个 Axes 对象在图形中的位置和大小。这种方法比 plt.subplots() 更底层,因此提供了更大的灵活性。

                    使用 ax.figure 获取所属的 Figure 对象

                      每个 Axes 对象都有一个 figure 属性,它指向该 Axes 对象所属的 Figure 对象。通过这个属性,我们可以访问和操作整个图形。

                    import matplotlib.pyplot as plt
                    # 创建一个图形和一个 Axes 对象
                    fig, ax = plt.subplots()
                    # 使用 ax.figure 访问所属的 Figure 对象
                    print(ax.figure is fig)  # 输出: True
                    # 也可以通过 ax.figure 来操作整个图形
                    ax.figure.suptitle('My Title')
                    # 显示图形
                    plt.show()
                    

                    在这个例子中,我们验证了 ax.figure 是否与通过 plt.subplots() 返回的 fig 对象相同,并展示了如何使用 ax.figure 来设置整个图形的标题。

                    共享坐标轴

                      有时,我们可能希望多个子图共享一个或多个坐标轴。Matplotlib 提供了 sharex 和 sharey 参数来实现这一功能。

                    import matplotlib.pyplot as plt
                    # 创建两个子图,并共享 x 轴
                    fig, axs = plt.subplots(nrows=2, sharex=True)
                    axs[0].plot([1, 2, 3], [1, 2, 3])
                    axs[1].plot([1, 2, 3], [3, 2, 1])
                    # 显示图形
                    plt.show()
                    

                    在这个例子中,两个子图共享了 x 轴,因此它们的 x 轴刻度和标签是相同的。

                      通过了解 fig 和 ax 之间的交互,我们可以更灵活地控制图形的布局和外观,从而创建出更具吸引力的可视化效果。无论是通过 plt.subplots() 创建子图,还是手动使用 fig.add_axes() 添加子图,我们都能够充分利用 Matplotlib 的强大功能来创建出符合我们需求的图形。

                    🎭 六、fig和ax的进一步定制

                      除了基本的绘图和坐标轴设置,fig 和 ax 还提供了许多高级功能,允许我们对图形进行更深入的定制。

                    自定义颜色、线条样式和标记

                    在绘制图形时,我们可以自定义线条的颜色、样式(实线、虚线等)以及数据点的标记样式。

                    ax.plot(x, y, color='red', linestyle='--', marker='o')
                    

                    添加网格、边框和背景色

                    通过 grid(), spines 属性以及 patch 对象,我们可以为图形添加网格线、控制边框的显示以及设置背景色。

                    import matplotlib.pyplot as plt
                    import numpy as np
                    x = np.linspace(0, 10, 100)
                    y = np.sin(x)
                    fig, ax = plt.subplots()
                    ax.grid(True)  # 显示网格线
                    ax.spines['top'].set_visible(False)  # 隐藏上边框
                    ax.spines['right'].set_visible(False)  # 隐藏右边框
                    fig.patch.set_facecolor('lightgrey')  # 设置背景色为浅灰色
                    # 显示图形
                    plt.show()
                    

                    🤝七、期待与你共同进步

                      🌱 亲爱的读者,非常感谢你每一次的停留和阅读!你的支持是我们前行的最大动力!🙏

                      🌐 在这茫茫网海中,有你的关注,我们深感荣幸。你的每一次点赞👍、收藏🌟、评论💬和关注💖,都像是明灯一样照亮我们前行的道路,给予我们无比的鼓舞和力量。🌟

                      📚 我们会继续努力,为你呈现更多精彩和有深度的内容。同时,我们非常欢迎你在评论区留下你的宝贵意见和建议,让我们共同进步,共同成长!💬

                      💪 无论你在编程的道路上遇到什么困难,都希望你能坚持下去,因为每一次的挫折都是通往成功的必经之路。我们期待与你一起书写编程的精彩篇章! 🎉

                      🌈 最后,再次感谢你的厚爱与支持!愿你在编程的道路上越走越远,收获满满的成就和喜悦!祝你编程愉快!🎉

                    🎉 结语

                      通过本博客的学习,你应该已经对 fig 和 ax 的用法有了更深入的了解。Matplotlib 是一个强大而灵活的绘图库,掌握其基本用法和高级定制技巧将为你的数据分析和可视化工作带来极大的便利。不断学习和实践,你将能够创建出更加精美和有效的数据可视化作品。感谢阅读,祝你学习愉快,收获满满!🚀

                    🔍 关键词

                      Matplotlib, fig, ax, subplots, 数据可视化, 图形定制, 坐标轴设置, 文本注释, 箭头, 共享坐标轴, 学习资源, 扩展阅读