Matplotlib 数据可视化技术

Beginner

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

简介

Matplotlib 是 Python 中一个强大的数据可视化库。它提供了各种工具来创建各种各样的图形、图表和绘图。Matplotlib 最强大的功能之一是其缩放数据的能力。本实验将向你介绍反双曲正弦缩放(AsinhScale),它是一种变换,允许绘制涵盖非常宽动态范围(包括正值和负值)的数量。

虚拟机使用提示

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

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

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

这是一个实验(Guided Lab),提供逐步指导来帮助你学习和实践。请仔细按照说明完成每个步骤,获得实际操作经验。根据历史数据,这是一个 中级 级别的实验,完成率为 80%。获得了学习者 100% 的好评率。

安装 Matplotlib

在开始之前,请确保已安装 Matplotlib。你可以使用 pip 命令按如下方式安装:

pip install matplotlib

导入所需库

要使用反双曲正弦缩放(AsinhScale),我们需要导入 Matplotlib 库和 numpy 库。Numpy 是 Python 中一个强大的数值计算库,经常与 Matplotlib 一起使用。

import matplotlib.pyplot as plt
import numpy as np

创建示例数据

在使用反双曲正弦缩放(AsinhScale)绘制数据之前,我们需要创建一些示例数据。我们将使用 numpy 的 linspace 方法创建一个简单的折线图。

## 为 y=x 图的变化准备示例值:
x = np.linspace(-3, 6, 500)

在示例 y = x 图上比较“symlog”和“asinh”的行为

我们将在示例 y = x 图上比较“symlog”和“asinh”的行为。我们将把同一个图绘制两次,一次使用“symlog”,另一次使用“asinh”。

fig1 = plt.figure()
ax0, ax1 = fig1.subplots(1, 2, sharex=True)

ax0.plot(x, x)
ax0.set_yscale('symlog')
ax0.grid()
ax0.set_title('symlog')

ax1.plot(x, x)
ax1.set_yscale('asinh')
ax1.grid()
ax1.set_title('asinh')

比较具有不同比例参数“linear_width”的“asinh”图

现在我们将比较具有不同比例参数“linear_width”的“asinh”图。我们将绘制三个具有不同“linear_width”值的图。

fig2 = plt.figure(layout='constrained')
axs = fig2.subplots(1, 3, sharex=True)
for ax, (a0, base) in zip(axs, ((0.2, 2), (1.0, 0), (5.0, 10))):
    ax.set_title(f'linear_width={a0:.3g}')
    ax.plot(x, x, label='y=x')
    ax.plot(x, 10*x, label='y=10x')
    ax.plot(x, 100*x, label='y=100x')
    ax.set_yscale('asinh', linear_width=a0, base=base)
    ax.grid()
    ax.legend(loc='best', fontsize='small')

比较二维柯西分布随机数上的“symlog”和“asinh”缩放

最后,我们将比较二维柯西分布随机数上的“symlog”和“asinh”缩放。我们将把同一个图绘制两次,一次使用“symlog”,另一次使用“asinh”。

fig3 = plt.figure()
ax = fig3.subplots(1, 1)
r = 3 * np.tan(np.random.uniform(-np.pi / 2.02, np.pi / 2.02,
                                 size=(5000,)))
th = np.random.uniform(0, 2*np.pi, size=r.shape)

ax.scatter(r * np.cos(th), r * np.sin(th), s=4, alpha=0.5)
ax.set_xscale('asinh')
ax.set_yscale('symlog')
ax.set_xlabel('asinh')
ax.set_ylabel('symlog')
ax.set_title('2D Cauchy random deviates')
ax.set_xlim(-50, 50)
ax.set_ylim(-50, 50)
ax.grid()

总结

本实验介绍了 Matplotlib 中的反双曲正弦缩放(AsinhScale),它是一种变换,可用于绘制涵盖非常宽动态范围(包括正值和负值)的量。我们学习了如何创建示例数据以及如何使用“symlog”和“asinh”绘制图形。我们还学习了如何比较具有不同比例参数的“asinh”图形,以及如何比较二维柯西分布随机数上的“symlog”和“asinh”缩放。