Python:获取与等高线对应的数组值
有没有办法从数组中提取数据,数组对应于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,它保存您要查找的数据 请参阅(此问
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的等高线方法。