Python:获取与等高线对应的数组值

Python:获取与等高线对应的数组值,python,arrays,matplotlib,contour,Python,Arrays,Matplotlib,Contour,有没有办法从数组中提取数据,数组对应于python中的轮廓线图?即,我有以下代码: n = 100 x, y = np.mgrid[0:1:n*1j, 0:1:n*1j] plt.contour(x,y,values) 其中,值是一个包含数据的2d数组(我将数据存储在一个文件中,但似乎无法在此处上载)。下图显示了相应的轮廓图。我的问题是,是否有可能从数值中获得准确的数据,例如对应于绘图中的左等高线 plt.contour返回一个QuadContourSet,它保存您要查找的数据 请参阅(此问

有没有办法从数组中提取数据,数组对应于python中的轮廓线图?即,我有以下代码:

n = 100
x, y = np.mgrid[0:1:n*1j, 0:1:n*1j]

plt.contour(x,y,values)
其中,值是一个包含数据的2d数组(我将数据存储在一个文件中,但似乎无法在此处上载)。下图显示了相应的轮廓图。我的问题是,是否有可能从数值中获得准确的数据,例如对应于绘图中的左等高线


plt.contour返回一个QuadContourSet,它保存您要查找的数据


请参阅(此问题可能与…)重复。

plt。contour
返回一个
QuadContourSet
。由此,我们可以通过以下方式访问各个线路:

cs.collections[0].get_paths()
这将返回所有单独的路径。要访问实际的
x,y
位置,我们需要查看每个路径的
顶点
属性。绘制的第一个等高线应可通过以下方式访问:

X, Y = cs.collections[0].get_paths()[0].vertices.T
请参见下面的示例,了解如何访问任何给定的行。在本例中,我仅访问第一个:

import matplotlib.pyplot as plt
import numpy as np

n = 100
x, y = np.mgrid[0:1:n*1j, 0:1:n*1j]

values = x**0.5 * y**0.5

fig1, ax1 = plt.subplots(1)
cs = plt.contour(x, y, values)

lines = []
for line in cs.collections[0].get_paths():
    lines.append(line.vertices)

fig1.savefig('contours1.png')

fig2, ax2 = plt.subplots(1)

ax2.plot(lines[0][:, 0], lines[0][:, 1])

fig2.savefig('contours2.png')
轮廓1.png:

轮廓2.png:

这里值得一提的是,由于这篇文章是我提出同样问题时最热门的文章,因此使用scikit image比使用matplotlib更简单。我鼓励你退房。他们示例的一个片段:

from skimage import measure
x, y = np.ogrid[-np.pi:np.pi:100j, -np.pi:np.pi:100j]
r = np.sin(np.exp((np.sin(x)**3 + np.cos(y)**2)))
contours = measure.find_contours(r, 0.8)

然后可以根据需要绘制/操纵。我更喜欢这一点,因为你不必深入matplotlib的深渊。

我发现
skimage.measure.find_contours
比现有的方法快10-50%,该方法由我的同事开发,可供我使用,基于matplotlib的等高线方法。