繁体   English   中英

在 imshow 上叠加等高线图

[英]Overlay contour plot on imshow

我无法使用等高线图和 imshow 生成叠加层。

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))
plt.imshow(Z, interpolation='nearest', cmap=plt.cm.hot, origin='lower')
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()

结果图片的等高线图强制进入左下角:

https://i.stack.imgur.com/p7Dtf.png

如何在图像顶部获得轮廓叠加?

您需要设置imshow的范围,以便坐标与contour图中使用的坐标imshow

imshow文档

范围:浮动(左,右,下,上),可选

图像将填充的数据坐标中的边界框。 图像沿 x 和 y 单独拉伸以填充框。

所以你可以使用:

extent = x.min(), x.max(), y.min(), y.max()
plt.imshow(Z, interpolation='nearest', 
           cmap=plt.cm.hot, origin='lower',
           extent=extent)

在此处输入图片说明

由于您不显示x,y坐标,另一种选择是删除contour中的X,Y参数,以便该坐标从0运行到n

plt.imshow(Z, interpolation='nearest', cmap=plt.cm.hot, origin='lower')
contours = plt.contour(f(X,Y), 10, colors='black')

输出:

在此处输入图片说明

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM