matplatlib绘图及多子图绘制

1、ax、fig、plt的含义

ax的含义

在Matplotlib中,ax通常是指代图表的坐标轴对象(Axes)。它表示在图表中的一个独立的子图区域,可以在这个区域内进行数据的可视化和绘制。ax对象提供了许多方法和属性,用于控制坐标轴的外观、标签、刻度等。

当你在Matplotlib中创建一个图表时,你通常会创建一个或多个ax对象,每个ax对象代表一个子图,你可以在每个子图中绘制不同的数据或图形。在多个ax对象中,你可以灵活地控制每个子图的布局、样式和内容。

以下是一个简单的示例,展示了如何在一个图表中创建多个子图,每个子图使用不同的ax对象:

import numpy as np
import matplotlib.pyplot as plt

# 创建画布和多个子图
fig, axs = plt.subplots(2, 2)

# 在每个子图中绘制不同的数据
x = np.linspace(0, 10, 100)
y1 = np.sin(x)
y2 = np.cos(x)
y3 = x**2
y4 = np.exp(x)

axs[0, 0].plot(x, y1)
axs[0, 0].set_title('Sin(x)')

axs[0, 1].plot(x, y2)
axs[0, 1].set_title('Cos(x)')

axs[1, 0].plot(x, y3)
axs[1, 0].set_title('x^2')

axs[1, 1].plot(x, y4)
axs[1, 1].set_title('Exp(x)')

# 调整子图之间的间距
plt.tight_layout()

# 显示图表
plt.show()

在这个示例中,axs是一个包含4个ax对象的二维数组,我们可以通过索引来访问不同位置的子图,并在每个子图中绘制不同的数据。

ax.set_xlabel('X')
ax.set_ylabel('Y')
ax.set_zlabel('Z')

fig的含义

在Matplotlib中,fig(figure的缩写)表示一个绘图对象,它代表了整个绘图窗口。你可以将fig看作是一个画布,你可以在上面绘制多个子图(axes),图像和其他元素。

在使用Matplotlib绘制图形时,通常的步骤是首先创建一个fig对象,然后在fig对象上添加一个或多个子图(axes)。每个子图可以包含一个或多个图表(plotscatter等),你可以在这些子图中进行绘制。

例如,下面是一个创建一个包含单个子图的fig对象的示例:

import matplotlib.pyplot as plt

# 创建一个fig对象,即绘图窗口
fig = plt.figure()

# 在fig对象上添加一个子图
ax = fig.add_subplot(1, 1, 1)

# 在子图上绘制图表
ax.plot([1, 2, 3, 4], [2, 4, 6, 8])

# 显示绘图
plt.show()

在这个示例中,我们首先创建了一个fig对象,然后使用fig.add_subplot()方法添加了一个子图。子图使用网格布局,(1, 1, 1)表示在一个1x1的网格中的第一个位置添加子图。最后,我们在子图上使用ax.plot()绘制了一个简单的折线图。

plt的含义

在Matplotlib中,pltmatplotlib.pyplot模块的缩写,是Matplotlib库的一个子模块。matplotlib.pyplot模块提供了一种类似于MATLAB绘图工具的界面,使得绘制图形变得更加简单和方便。

通过导入matplotlib.pyplot模块并将其简写为plt,你可以使用其中的函数来创建图形、绘制各种图表和进行各种图形操作。plt模块中的函数提供了一种高级界面,允许你在绘图对象(figure)、子图(axes)和图表之间进行交互。

以下是一些常见的plt模块函数的用法示例:

pythonCopy codeimport matplotlib.pyplot as plt

# 创建一个新的绘图对象
plt.figure()

# 在当前绘图对象上绘制折线图
plt.plot([1, 2, 3, 4], [2, 4, 6, 8], label='Line 1')

# 设置图标题、横轴标签和纵轴标签
plt.title('My Plot')
plt.xlabel('X Label')
plt.ylabel('Y Label')

# 添加图例
plt.legend()

# 显示网格
plt.grid(True)

# 显示绘图
plt.show()

通过使用plt模块,你可以快速绘制图表、添加标签和图例、设置标题和轴标签等。这种简洁的界面使得绘图变得非常方便,并且适用于许多常见的绘图需求。

2、常规绘图

matplotlib.pyplot 是 Matplotlib 库中的一个子模块,用于绘制各种类型的图表,如折线图、散点图、柱状图、饼图等。它提供了一个高级接口,使得在 Python 中创建和自定义图表变得更加容易。以下是 matplotlib.pyplot 的一些常见用法:

1. 导入Matplotlib.pyplot:

在使用之前,首先需要导入 Matplotlib 和 pyplot 模块:

import matplotlib.pyplot as plt

2. 创建一个简单的折线图:

# 创建数据
x = [1, 2, 3, 4, 5]
y = [10, 15, 13, 18, 20]

# 创建折线图
plt.plot(x, y)

# 添加标题和标签
plt.title('Simple Line Plot')
plt.xlabel('X-axis')
plt.ylabel('Y-axis')

# 显示图
plt.show()

3. 创建一个散点图:

# 创建数据
x = [1, 2, 3, 4, 5]
y = [10, 15, 13, 18, 20]

# 创建散点图
plt.scatter(x, y, marker='o', color='blue')

# 添加标题和标签
plt.title('Scatter Plot')
plt.xlabel('X-axis')
plt.ylabel('Y-axis')

# 显示图
plt.show()

4. 创建一个柱状图:

# 创建数据
categories = ['Category A', 'Category B', 'Category C', 'Category D']
values = [10, 15, 13, 18]

# 创建柱状图
plt.bar(categories, values)

# 添加标题和标签
plt.title('Bar Chart')
plt.xlabel('Categories')
plt.ylabel('Values')

# 显示图
plt.show()

5. 创建一个饼图:

# 创建数据
labels = ['Category A', 'Category B', 'Category C', 'Category D']
sizes = [10, 15, 13, 18]

# 创建饼图
plt.pie(sizes, labels=labels, autopct='%1.1f%%', startangle=140)

# 添加标题
plt.title('Pie Chart')

# 显示图
plt.show()

这只是 Matplotlib 的一小部分功能。您可以使用 pyplot 来自定义颜色、图例、刻度、网格等,以满足特定的图形需求。请参考 Matplotlib 官方文档和示例库以获取更多信息和示例:https://matplotlib.org/stable/contents.html

Matplotlib 是一个功能强大且高度可定制的库,使您能够创建各种类型的图表以及美观的数据可视化。

3、绘制子图

使用 Matplotlib 绘制子图(subplot)是一种在单个画布上创建多个子图的方法。您可以使用 plt.subplotsplt.subplot 函数来实现这一目标。以下是使用 Matplotlib 绘制子图的示例:

版本1:使用 plt.subplots 创建子图

版本1.1 单个绘图

import matplotlib.pyplot as plt

# 创建一张画布,分成 2 行 2 列,共 4 个子图
fig, axes = plt.subplots(2, 2, figsize=(8, 6))

# 在每个子图上绘制内容
axes[0, 0].plot([1, 2, 3, 4, 5], [1, 4, 9, 16, 25])
axes[0, 0].set_title('Subplot 1')

axes[0, 1].scatter([1, 2, 3, 4, 5], [1, 2, 3, 4, 5])
axes[0, 1].set_title('Subplot 2')

axes[1, 0].bar(['A', 'B', 'C', 'D'], [10, 15, 13, 18])
axes[1, 0].set_title('Subplot 3')

axes[1, 1].pie([20, 30, 15, 35], labels=['A', 'B', 'C', 'D'], autopct='%1.1f%%')
axes[1, 1].set_title('Subplot 4')

# 调整子图之间的间距
plt.tight_layout()

# 显示图
plt.show()

在上面的示例中,我们首先使用 plt.subplots 创建了一个包含 2 行 2 列的画布,并得到了包含子图的 axes 对象。然后,在每个子图上使用 axes 对象进行绘制,并为每个子图设置标题。最后,使用 plt.tight_layout() 来调整子图之间的间距,并通过 plt.show() 来显示图。

版本1.2 循环绘图

要在Matplotlib中创建一张画布上的一行三列的图,您可以使用plt.subplots函数来创建子图,并使用ax对象来绘制每个子图。以下是一个示例:

import matplotlib.pyplot as plt

# 创建一张画布,一行三列的图
fig, axes = plt.subplots(1, 3, figsize=(12, 4))  # 一行三列的图,设置画布大小

# 在每个子图上绘制内容
for i, ax in enumerate(axes):
    x = [1, 2, 3, 4, 5]
    y = [val ** (i + 1) for val in x]
    ax.plot(x, y)
    ax.set_title(f'Plot {i + 1}')  # 设置每个子图的标题

# 调整子图之间的间距
plt.tight_layout()

# 显示图
plt.show()

在上面的示例中,我们首先使用plt.subplots创建了一个一行三列的图,并传递了figsize参数以设置画布的大小。然后,我们使用for循环在每个子图上绘制内容,并设置每个子图的标题。最后,我们使用plt.tight_layout()来调整子图之间的间距,以确保它们之间不会重叠。最后,通过plt.show()来显示图。

您可以根据需要在每个子图上绘制不同的内容,并为每个子图设置不同的标题。这个示例是一个基本的演示,您可以根据您的需求进行自定义。

版本2:使用 plt.subplot 创建子图

您还可以使用 plt.subplot 函数来创建单个子图,如下所示:

import matplotlib.pyplot as plt

# 创建第一个子图
plt.subplot(2, 2, 1)
plt.plot([1, 2, 3, 4, 5], [1, 4, 9, 16, 25])
plt.title('Subplot 1')

# 创建第二个子图
plt.subplot(2, 2, 2)
plt.scatter([1, 2, 3, 4, 5], [1, 2, 3, 4, 5])
plt.title('Subplot 2')

# 创建第三个子图
plt.subplot(2, 2, 3)
plt.bar(['A', 'B', 'C', 'D'], [10, 15, 13, 18])
plt.title('Subplot 3')

# 创建第四个子图
plt.subplot(2, 2, 4)
plt.pie([20, 30, 15, 35], labels=['A', 'B', 'C', 'D'], autopct='%1.1f%%')
plt.title('Subplot 4')

# 调整子图之间的间距
plt.tight_layout()

# 显示图
plt.show()

在这个示例中,我们使用 plt.subplot 函数分别创建了四个子图。与 plt.subplots 不同,plt.subplot 通过三个参数指定子图的行数、列数和子图的位置。然后,我们在每个子图上绘制内容并设置标题,最后调整子图之间的间距并显示图。

这是使用 Matplotlib 创建子图的两种常见方法。您可以根据需要选择其中一种,以创建不同数量和排列方式的子图。

版本3:使用add_subplot创建子图

版本3.1 单个绘图

您可以使用Matplotlib的add_subplot方法在一张画布上绘制一行三列的图。以下是如何使用add_subplot来实现这一目标的示例:

import matplotlib.pyplot as plt

# 创建一张画布
fig = plt.figure(figsize=(12, 4))

# 添加子图1(一行三列中的第一个)
ax1 = fig.add_subplot(131)  # 131 表示一行三列中的第一个图
ax1.set_title('Subplot 1')
ax1.plot([1, 2, 3, 4, 5], [1, 4, 9, 16, 25])

# 添加子图2(一行三列中的第二个)
ax2 = fig.add_subplot(132)  # 132 表示一行三列中的第二个图
ax2.set_title('Subplot 2')
ax2.plot([1, 2, 3, 4, 5], [1, 2, 3, 4, 5])

# 添加子图3(一行三列中的第三个)
ax3 = fig.add_subplot(133)  # 133 表示一行三列中的第三个图
ax3.set_title('Subplot 3')
ax3.plot([1, 2, 3, 4, 5], [5, 4, 3, 2, 1])

# 调整子图之间的间距
plt.tight_layout()

# 显示图
plt.show()

在上述示例中,我们首先创建了一张画布(fig),然后使用fig.add_subplot方法添加每个子图,其中131表示一行三列中的第一个图,132表示第二个,133表示第三个。我们为每个子图设置了标题,并绘制了不同的数据。最后,使用plt.tight_layout()来调整子图之间的间距,并通过plt.show()来显示图。

您可以根据需要在每个子图上绘制不同的内容,并为每个子图设置不同的标题。这个示例是一个基本的演示,您可以根据您的需求进行自定义。

版本3.2 循环绘图

您可以使用循环来简化在一张画布上绘制一行三列的子图。以下是一个使用循环的示例:

import matplotlib.pyplot as plt

# 创建一张画布
fig = plt.figure(figsize=(12, 4))

# 子图数量
num_subplots = 3

for i in range(1, num_subplots + 1):
    ax = fig.add_subplot(1, num_subplots, i)
    ax.set_title(f'Subplot {i}')
    x = [1, 2, 3, 4, 5]
    y = [j ** i for j in x]
    ax.plot(x, y)

# 调整子图之间的间距
plt.tight_layout()

# 显示图
plt.show()

在这个示例中,我们首先创建了一个包含三个子图的画布。然后,使用for循环创建每个子图,设置标题,并绘制不同的数据。这使得代码更加简洁,并且您可以轻松扩展到任意数量的子图。最后,使用plt.tight_layout()来调整子图之间的间距,并通过plt.show()来显示图。

4、绘制三维图

fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')

5、其他

如何设置图层顺序

在 Matplotlib 中,你可以使用 zorder 参数来设置图层的顺序。zorder 参数控制绘图元素的层次,具有较高值的元素将显示在较低值的元素之上。

默认情况下,绘图元素的 zorder 值为 0,你可以通过调整它来控制元素的显示顺序。值越大的元素将覆盖值较小的元素。

以下是一个示例,展示如何使用 zorder 参数来控制图层顺序:

import matplotlib.pyplot as plt

# 创建一些示例数据
x = [1, 2, 3, 4, 5]
y1 = [2, 4, 6, 8, 10]
y2 = [1, 3, 5, 7, 9]

# 绘制两个线条,同时设置不同的 zorder 值
plt.plot(x, y1, label='Line 1', color='blue', zorder=2)
plt.plot(x, y2, label='Line 2', color='red', zorder=1)

# 添加图例
plt.legend()

# 显示图形
plt.show()

在这个示例中,zorder 值较大的蓝色线条将显示在红色线条之上。你可以根据需要为不同的绘图元素设置不同的 zorder 值,以控制它们的显示层次。

一帧一帧画动图

plt.show(block=False)
plt.pause(0.001) # 添加适度的延迟时间
ax.cla()
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值