Python 在Matplotlib中设置等高线子图的位置

Python 在Matplotlib中设置等高线子图的位置,python,matplotlib,scipy,Python,Matplotlib,Scipy,我正在使用SciPy在CT图像中识别肿瘤。确定包含肿瘤的切片后,我使用以下方法检索切片: slice_x, slice_y = ndimage.find_objects(label_im==label)[0] 然后,我将完整图像绘制如下: plt.imshow(image, cmap='gray') 我想将提取的切片(包含肿瘤)的轮廓覆盖在原始图像的适当位置。但是,我无法使等高线图位于适当区域的顶部。相反,等高线图始终位于图像的左上角。以下是我正在使用的: plt.contour(mask[

我正在使用SciPy在CT图像中识别肿瘤。确定包含肿瘤的切片后,我使用以下方法检索切片:

slice_x, slice_y = ndimage.find_objects(label_im==label)[0]
然后,我将完整图像绘制如下:

plt.imshow(image, cmap='gray')
我想将提取的切片(包含肿瘤)的轮廓覆盖在原始图像的适当位置。但是,我无法使等高线图位于适当区域的顶部。相反,等高线图始终位于图像的左上角。以下是我正在使用的:

plt.contour(mask[slice_x, slice_y], position=(slice_x.start, \
slice_y.start), linewidths=2, colors='r')
结果如下:


如何设置等高线图在主图中的位置?谢谢

您需要使用
范围
关键字参数,而不是
位置
。但是,您需要指定最大值和起始值(即,它需要是
extent=[xmin,xmax,ymin,ymax]

在您的情况下,它看起来像:

extent=[xslice.start, xslice.stop+1, yslice.start, yslice.stop+1]
plt.contour(mask[xslice, yslice], extent=extent)
请注意,您可能需要使用
origin
关键字参数(或翻转ymin和ymax)来控制输入数据的解释方式

或者,您可以执行以下操作:

x, y = np.mgrid[xslice, yslice]
plt.contour(x, y, mask[xslcie, yslice])
如果你在一个大的区域工作,效率会有点低,但是会干净得多

作为后一种方法的完整示例:

import numpy as np
import matplotlib.pyplot as plt
import matplotlib.cm as cm

data = np.random.random((100,100))

xslice, yslice = slice(20, 30), slice(45, 65)

plt.imshow(data, cmap=cm.gray)

x, y = np.mgrid[xslice, yslice]
plt.contour(x, y, data[xslice, yslice])

plt.show()

您需要使用
范围
关键字参数,而不是
位置
。但是,您需要指定最大值和起始值(即,它需要是
extent=[xmin,xmax,ymin,ymax]

在您的情况下,它看起来像:

extent=[xslice.start, xslice.stop+1, yslice.start, yslice.stop+1]
plt.contour(mask[xslice, yslice], extent=extent)
请注意,您可能需要使用
origin
关键字参数(或翻转ymin和ymax)来控制输入数据的解释方式

或者,您可以执行以下操作:

x, y = np.mgrid[xslice, yslice]
plt.contour(x, y, mask[xslcie, yslice])
如果你在一个大的区域工作,效率会有点低,但是会干净得多

作为后一种方法的完整示例:

import numpy as np
import matplotlib.pyplot as plt
import matplotlib.cm as cm

data = np.random.random((100,100))

xslice, yslice = slice(20, 30), slice(45, 65)

plt.imshow(data, cmap=cm.gray)

x, y = np.mgrid[xslice, yslice]
plt.contour(x, y, data[xslice, yslice])

plt.show()

谢谢,但运气不好。我能够使用
范围移动轮廓(最后!),但它从来没有位于正确的位置。我试过翻转Xs和Ys,原点='upper',原点='lower',原点='image'。这两种方法给出了相同(但不正确)的结果。知道为什么吗?没关系,明白了。我正在翻转slice_x和slice_y变量。非常感谢!谢谢,但是运气不好。我能够使用
范围移动轮廓(最后!),但它从来没有位于正确的位置。我试过翻转Xs和Ys,原点='upper',原点='lower',原点='image'。这两种方法给出了相同(但不正确)的结果。知道为什么吗?没关系,明白了。我正在翻转slice_x和slice_y变量。非常感谢!