有没有办法从数组中提取数据,这对应于python中的contourplot的一行?即我有以下代码:
os.fchdir(real_root)
os.chroot('.')
os.close(real_root)
其中values是带数据的2d数组(我将数据存储在文件中,但似乎无法在此处上传)。下图显示了相应的等值线图。我的问题是,如果有可能从数据中获得准确的数据,在图中的左轮廓线?
答案 0 :(得分:3)
plt.contour
返回QuadContourSet
。由此,我们可以使用以下方式访问各个行:
cs.collections[0].get_paths()
返回所有单个路径。要访问实际的x, y
位置,我们需要查看每个路径的vertices
属性。绘制的第一个轮廓应该可以使用:
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 :(得分:0)
plt.contour返回一个QuadContourSet,它保存您所追踪的数据。
请参阅documentation(此问题可能与......重复)
答案 2 :(得分:0)
在这里值得一提的是,由于这篇文章是我遇到相同问题时的热门文章,因此使用scikit-image可以比使用matplotlib更加简单。我鼓励您检查skimage.measure.find_contours。他们的示例的片段:
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的深草丛中。