Matplotlib 条形图

Beginner

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

简介

Matplotlib 是一个广受欢迎的用于数据可视化的 Python 库。它提供了广泛的工具来创建图表、图形和其他可视化效果。在本教程中,你将学习如何使用 Matplotlib 创建带有渐变的柱状图。

虚拟机使用提示

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

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

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

导入必要的库

首先,我们需要导入必要的库,即 NumPy 和 Matplotlib。NumPy 是一个用于数值计算的库,而 Matplotlib 是一个用于数据可视化的库。

import matplotlib.pyplot as plt
import numpy as np

设置随机种子

我们将设置随机种子,以确保每次运行代码时都能得到相同的随机数。这通过使用 np.random.seed() 函数来完成。

np.random.seed(19680801)

定义渐变图像函数

我们需要定义一个函数,该函数将基于颜色映射表创建一个渐变图像。此函数将接受一个坐标轴对象、渐变方向以及要使用的颜色映射表范围。然后,该函数将生成渐变图像并返回它。

def gradient_image(ax, direction=0.3, cmap_range=(0, 1), **kwargs):
    """
    根据颜色映射表绘制渐变图像。

    参数
    ----------
    ax : Axes
        要绘制的坐标轴。
    direction : float
        渐变方向。这是一个介于 0(=垂直)到 1(=水平)之间的数字。
    cmap_range : float, float
        颜色映射表中应用于渐变的部分(cmin, cmax),其中完整的颜色映射表范围是 (0, 1)。
    **kwargs
        其他参数将传递给 `.Axes.imshow()`。
        特别是,*cmap*、*extent*和*transform*可能会很有用。
    """
    phi = direction * np.pi / 2
    v = np.array([np.cos(phi), np.sin(phi)])
    X = np.array([[v @ [1, 0], v @ [1, 1]],
                  [v @ [0, 0], v @ [0, 1]]])
    a, b = cmap_range
    X = a + (b - a) / X.max() * X
    im = ax.imshow(X, interpolation='bicubic', clim=(0, 1),
                   aspect='auto', **kwargs)
    return im

定义渐变条形图函数

接下来,我们需要定义一个函数来创建渐变条形图。此函数将接受坐标轴对象、条形图的 x 和 y 坐标、条形图的宽度以及条形图的底部位置。然后,该函数将为每个条形图创建一个渐变图像并返回。

def gradient_bar(ax, x, y, width=0.5, bottom=0):
    for left, top in zip(x, y):
        right = left + width
        gradient_image(ax, extent=(left, right, bottom, top),
                       cmap=plt.cm.Blues_r, cmap_range=(0, 0.8))

创建图表

现在,我们可以创建图表了。我们将首先创建一个图形和一个坐标轴对象。然后,我们将设置坐标轴的 x 和 y 范围。我们将使用 gradient_image() 函数创建一个渐变背景。最后,我们将创建一个随机数据集,并使用 gradient_bar() 函数创建条形图。

fig, ax = plt.subplots()
ax.set(xlim=(0, 10), ylim=(0, 1))

## 背景图像
gradient_image(ax, direction=1, extent=(0, 1, 0, 1), transform=ax.transAxes,
               cmap=plt.cm.RdYlGn, cmap_range=(0.2, 0.8), alpha=0.5)

N = 10
x = np.arange(N) + 0.15
y = np.random.rand(N)
gradient_bar(ax, x, y, width=0.7)
plt.show()

总结

在本教程中,你学习了如何使用 Matplotlib 创建带有渐变的条形图。你学习了如何定义渐变图像函数和渐变条形图函数,以及如何使用这些函数创建图表。你还学习了如何设置随机种子以及如何导入必要的库。