You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在matplotlib的imshow输出上正确叠加contour等高线图

问题原因

出现该问题的核心原因是两个绘图函数使用的坐标轴范围不匹配:

  • plt.imshow()在未指定extent参数时,默认使用数组的行列索引作为坐标轴数值,你传入的Z数组尺寸为300×300,因此imshow生成的底图坐标范围为x∈[0,299]、y∈[0,299]
  • plt.contour()传入的X、Y网格数据范围为x∈[-3,3]、y∈[-3,3],该数值范围远小于底图的坐标范围,因此等高线只会显示在左下角极小区域
解决方法

在调用plt.imshow()时补充extent参数,手动指定图像对应的实际坐标范围即可,extent参数的格式为(x最小值, x最大值, y最小值, y最大值),对应你当前场景的数值就是(-3, 3, -3, 3)。

修改后的完整代码如下:

import numpy as np
import matplotlib.pyplot as plt

%matplotlib inline

def f(x, y):
    return (1 - x / 2 + x ** 5 + y ** 3 ) * np.exp(-x ** 2 - y ** 2)

n = 100
x = np.linspace(-3, 3, 3 * n)
y = np.linspace(-3, 3, 3 * n)
X, Y = np.meshgrid(x, y)
Z = f(X, Y)
plt.figure(figsize=(8,6))
# 新增extent参数对齐坐标范围
plt.imshow(Z, interpolation='nearest', cmap=plt.cm.hot, origin='lower', extent=(-3, 3, -3, 3))
contours = plt.contour(X, Y, f(X,Y), 10, colors='black')
plt.clabel(contours, inline=1, fontsize=10)
plt.xticks([])
plt.yticks([])
plt.savefig('overlay_image.pdf', dpi=72)
plt.show()

修改后运行即可实现等高线在imshow底图上的完整正确叠加。

内容的提问来源于stack exchange,提问作者C.B.

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 10:36:00