Python 中 Matplotlib 的可视化控制

Beginner

This tutorial is from open-source community. Access the source code

简介

Matplotlib 是 Python 中的一个数据可视化库,用于在 Python 中创建静态、动画和交互式可视化。它提供了一个面向对象的 API,用于使用 Tkinter、wxPython、Qt 或 GTK 等通用 GUI 工具包将绘图嵌入应用程序中。在本实验中,我们将学习如何使用 Python 在 Matplotlib 中控制视图限制和粘性边缘。

虚拟机使用提示

虚拟机启动完成后,点击左上角切换到“笔记本”标签,以访问 Jupyter Notebook 进行练习。

有时,你可能需要等待几秒钟让 Jupyter Notebook 完成加载。由于 Jupyter Notebook 的限制,操作验证无法自动化。

如果你在学习过程中遇到问题,请随时向 Labby 提问。课程结束后提供反馈,我们将立即为你解决问题。

带边距绘图

Matplotlib 中的 margins() 方法可用于设置绘图的边距,而不是使用 set_xlim()set_ylim() 方法。在本步骤中,我们将学习如何使用 margins() 方法而不是 set_xlim()set_ylim() 方法对绘图进行放大和缩小。

import matplotlib.pyplot as plt
import numpy as np

def f(t):
    return np.exp(-t) * np.cos(2*np.pi*t)

t1 = np.arange(0.0, 3.0, 0.01)

## 创建一个带边距的子图
ax1 = plt.subplot(212)
ax1.margins(0.05) ## 默认边距是 0.05,值为 0 表示拟合
ax1.plot(t1, f(t1))

## 创建一个边距放大的子图
ax2 = plt.subplot(221)
ax2.margins(2, 2) ## 值>0.0 会放大
ax2.plot(t1, f(t1))
ax2.set_title('放大')

## 创建一个边距缩小的子图
ax3 = plt.subplot(222)
ax3.margins(x=0, y=-0.25) ## 值在 (-0.5, 0.0) 范围内会缩小到中心
ax3.plot(t1, f(t1))
ax3.set_title('缩小')

plt.show()

粘性边缘

Matplotlib 中的一些绘图函数会使坐标轴范围具有“粘性”,即不受 margins() 方法的影响。例如,imshow()pcolor() 函数期望用户希望坐标轴范围紧密围绕绘图中显示的像素。如果不希望有这种行为,就需要将 use_sticky_edges 设置为 False。在本步骤中,我们将学习如何解决 Matplotlib 中的粘性边缘问题。

## 创建一个网格
y, x = np.mgrid[:5, 1:6]

## 定义多边形坐标
poly_coords = [
    (0.25, 2.75), (3.25, 2.75),
    (2.25, 0.75), (0.25, 0.75)
]

## 创建子图
fig, (ax1, ax2) = plt.subplots(ncols=2)

## 对 ax1 使用粘性边缘,对 ax2 关闭粘性边缘
ax2.use_sticky_edges = False

## 在两个子图上绘图
for ax, status in zip((ax1, ax2), ('是', '不是')):
    cells = ax.pcolor(x, y, x+y, cmap='inferno', shading='auto') ## 粘性
    ax.add_patch(
        Polygon(poly_coords, color='forestgreen', alpha=0.5)
    ) ## 非粘性
    ax.margins(x=0.1, y=0.05)
    ax.set_aspect('equal')
    ax.set_title(f'{status} 粘性')

plt.show()

总结

在本实验中,我们学习了如何使用 Python 在 Matplotlib 中控制视图限制和粘性边缘。我们学习了如何使用 margins() 方法而不是 set_xlim()set_ylim() 方法对绘图进行放大和缩小。我们还学习了如何使用 use_sticky_edges 属性来解决 Matplotlib 中的粘性边缘问题。