使用 Python Matplotlib 创建等高线图

PythonPythonBeginner
立即练习

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

💡 本教程由 AI 辅助翻译自英文原版。如需查看原文,您可以 切换至英文原版

简介

本实验是一个关于如何使用 Python Matplotlib 创建等高线图的分步教程。等高线图有助于在二维中可视化三维数据。在本教程中,我们将展示简单的等高线绘制、带有等高线颜色条的图像上的等高线以及带标签的等高线。

虚拟机提示

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

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

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

导入所需库

在开始创建等高线图之前,我们需要导入必要的库。在本教程中,我们将使用 numpy 和 matplotlib。

import matplotlib.pyplot as plt
import numpy as np

创建数据

我们需要创建用于绘制等高线图的数据。在这个例子中,我们将创建两个二维高斯函数。

delta = 0.025
x = np.arange(-3.0, 3.0, delta)
y = np.arange(-2.0, 2.0, delta)
X, Y = np.meshgrid(x, y)
Z1 = np.exp(-X**2 - Y**2)
Z2 = np.exp(-(X - 1)**2 - (Y - 1)**2)
Z = (Z1 - Z2) * 2

创建一个带标签的简单等高线图

现在我们已经有了数据,就可以使用默认颜色创建一个带标签的简单等高线图。

fig, ax = plt.subplots()
CS = ax.contour(X, Y, Z)
ax.clabel(CS, inline=True, fontsize=10)
ax.set_title('Simplest default with labels')

手动放置等高线标签

我们也可以通过提供一个位置列表(以数据坐标表示)来手动放置等高线标签。

fig, ax = plt.subplots()
CS = ax.contour(X, Y, Z)
manual_locations = [
    (-1, -1.4), (-0.62, -0.7), (-2, 0.5), (1.7, 1.2), (2.0, 1.4), (2.4, 1.7)]
ax.clabel(CS, inline=True, fontsize=10, manual=manual_locations)
ax.set_title('labels at selected locations')

设置等高线颜色

我们可以强制所有等高线为相同颜色,或者将负等高线设置为实线而非虚线。

fig, ax = plt.subplots()
CS = ax.contour(X, Y, Z, 6, colors='k')  ## 负等高线默认是虚线。
ax.clabel(CS, fontsize=9, inline=True)
ax.set_title('Single color - negative contours dashed')
plt.rcParams['contour.negative_linestyle'] = 'solid'
fig, ax = plt.subplots()
CS = ax.contour(X, Y, Z, 6, colors='k')  ## 负等高线默认是虚线。
ax.clabel(CS, fontsize=9, inline=True)
ax.set_title('Single color - negative contours solid')

手动指定等高线颜色

我们也可以手动指定等高线的颜色。

fig, ax = plt.subplots()
CS = ax.contour(X, Y, Z, 6,
                linewidths=np.arange(.5, 4,.5),
                colors=('r', 'green', 'blue', (1, 1, 0), '#afeeee', '0.5'),
                )
ax.clabel(CS, fontsize=9, inline=True)
ax.set_title('Crazy lines')

使用颜色映射表指定等高线颜色

我们可以使用颜色映射表来指定等高线的颜色。

fig, ax = plt.subplots()
im = ax.imshow(Z, interpolation='bilinear', origin='lower',
               cmap=cm.gray, extent=(-3, 3, -2, 2))
levels = np.arange(-1.2, 1.6, 0.2)
CS = ax.contour(Z, levels, origin='lower', cmap='flag', extend='both',
                linewidths=2, extent=(-3, 3, -2, 2))

## 加粗零等高线。
CS.collections[6].set_linewidth(4)

ax.clabel(CS, levels[1::2],  ## 每隔一个级别标注
          inline=True, fmt='%1.1f', fontsize=14)

## 为等高线制作一个颜色条
CB = fig.colorbar(CS, shrink=0.8)

ax.set_title('Lines with colorbar')

## 我们仍然也可以为图像添加一个颜色条。
CBI = fig.colorbar(im, orientation='horizontal', shrink=0.8)

## 这使得原来的颜色条看起来有点不协调,
## 所以让我们改进一下它的位置。

l, b, w, h = ax.get_position().bounds
ll, bb, ww, hh = CB.ax.get_position().bounds
CB.ax.set_position([ll, b + 0.1*h, ww, h*0.8])

总结

在本实验中,我们学习了如何使用Python的Matplotlib创建等高线图。我们涵盖了创建带有标签的简单等高线图、手动放置等高线标签、设置等高线颜色、手动指定等高线颜色以及使用颜色映射表指定等高线颜色。