Python 图形的绘制轮廓线

发布于:2025-03-30 ⋅ 阅读:(37) ⋅ 点赞:(0)

Python 图形的绘制轮廓线

引言

今天遇到一个问题,对于一幅二维图像,我们该如何在它上面绘制出类似等高线一样的轮廓线,这里特来记录一下

正文

我们需要用到 Matplotlib 库中的 coutour 函数。它的主要参数有三个,X,Y 为二维图像的坐标,Z 对于每个 X,Y 坐标位置上的值。levels 就是我们需要画出的轮廓线有哪些了,colors 对应每部分轮廓线区域的颜色。

示例 1

这里我们以一个简单的轮廓线为例。

x = np.arange(1, 10)
y = np.arange(1, 10)
X, Y = np.meshgrid(x, y)
Z = x * y.reshape(-1, 1)

plt.figure()
cs = plt.contourf(X, Y, Z, levels=[10, 30, 50],
                  colors=['#808080', '#A0A0A0', '#C0C0C0'], extend='both')
cs.cmap.set_over('red')
cs.cmap.set_under('blue')
cs.changed()
plt.show()

运行后的图像如下图所示:
在这里插入图片描述

示例 2

我们以一个对称分布的二维图像为例:

import numpy as np
import matplotlib.pyplot as plt

x = np.linspace(-1, 1, 100)
y = np.linspace(-1, 1, 100)
X, Y = np.meshgrid(x, y)
Z = np.abs(X) * np.abs(Y)

# 二维面振幅分布图
plt.figure()
plt.imshow(Z, extent=(-1, 1, -1, 1), cmap='viridis')
contour = plt.contour(X, Y, Z, levels=10, colors='white', linewidths=1)
plt.clabel(contour, inline=True, fontsize=8)
plt.show()

这里需要注意的是 ,我们将 levels 设置为 10,这意味着我们会将整个图像区域划分为十个区域,因此我们会得到九条等高线。这里我们为了高对比度,将等高线的颜色设置为了 white。

最重要的一点,在 imshow() 函数中,我们通过设置 extent 参数将二维图像的横纵坐标变为了与等高线横纵坐标范围一致 。

同时,我们通过 plt.clabel(contour, inline=True, fontsize=8) 给每条等高线设置了标记。

在这里插入图片描述

示例 3

这里我们以高斯光斑来举例,高斯光斑可以参考这篇------Python 绘制高斯曲面图

import numpy as np
import matplotlib.pyplot as plt

x = np.linspace(-1, 1, 100)
y = np.linspace(-1, 1, 100)
X, Y = np.meshgrid(x, y)
w0 = 1
gaussian = np.exp(-((pow(X, 2) + pow(Y, 2)) / pow(w0, 2)))

plt.figure()
plt.imshow(gaussian, extent=(-1, 1, -1, 1), cmap='viridis')
plt.colorbar()
contour = plt.contour(X, Y, gaussian, levels=10, colors='white', linewidths=1)
plt.clabel(contour, inline=True, fontsize=8)
plt.show()

在这里插入图片描述
这里唯一需要注意的一点是,如果我们在绘制完等高线后再使用 plt.colorbar(),那么添加的 colorbar 就是针对等高线的,这里我们是针对二维图像给出的 colorbar。

如果大家觉得有用,就点个赞让更多的人看到吧~