matplotlib 在颜色条图上绘制等高线

Jim*_*ang 1 matplotlib python-3.x

我使用下面的代码生成图像的颜色条图:

plt.imshow(distance)
cb = plt.colorbar()
plt.savefig(generate_filename("test_images.png"))
cb.remove()
Run Code Online (Sandbox Code Playgroud)

图像看起来像这样: 在此输入图像描述

我想在此图像上绘制一条轮廓线,其中有符号距离值等于 0。我检查了文档,pyplot.contour但它需要一个表示坐标的 X 和 Y 向量以及表示高度的 Z。有没有办法生成X、Y、Z?或者有没有更好的功能来实现这一点?谢谢!

Joh*_*anC 5

如果默认情况下省略 X 和 Y,plt.contour将使用数组索引(在本例中,x 和 y 的范围均为 0-1023)。

要仅在给定级别绘制轮廓线,可以使用levels=[0]。该colors=参数可以固定一种或多种颜色。或者,您可以在颜色条上画一条线来指示级别的值。

import matplotlib.pyplot as plt
import numpy as np
from scipy import ndimage # to smooth a test image

# create a test image with similar properties as the given one

np.random.seed(20221230)
distance = np.pad(np.random.randn(1001, 1001), (11, 11), constant_values=-0.02)
distance = ndimage.filters.gaussian_filter(distance, 100)
distance -= distance.min()
distance = distance / distance.max() * 0.78 - 0.73

plt.imshow(distance)
cbar = plt.colorbar()

level = 0
color = 'red'
plt.contour(distance, levels=[level], colors=color)
cbar.ax.axhline(level, color=color) # show the level on the colorbar
plt.show()
Run Code Online (Sandbox Code Playgroud)

图像顶部 0 级的轮廓线