简介
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 创建带有渐变的条形图。你学习了如何定义渐变图像函数和渐变条形图函数,以及如何使用这些函数创建图表。你还学习了如何设置随机种子以及如何导入必要的库。