如何获取等高线图中绘制的线条的(x,y)值?

19

有没有一种简单的方法可以获取绘制如下轮廓线的(x,y)值:

import matplotlib.pyplot as plt
x = [1,2,3,4]
y = [1,2,3,4]
m = [[15,14,13,12],[14,12,10,8],[13,10,7,4],[12,8,4,0]]
cs = plt.contour(x,y,m, [9.5])
plt.show()
2个回答

19

查看返回的ContourSet对象的collections属性。特别是第一个集合的get_paths()方法将返回组成每条线段的一对点。

cs.collections[0].get_paths()

使用 Path.vertices 属性可以得到坐标的 NumPy 数组。

p1 = cs.collections[0].get_paths()[0]  # grab the 1st path
coor_p1 = p1.vertices

1
这真的很有用,谢谢!你知道如何在轮廓曲线上获得/插值等间距点的任何方法吗?(以这种方式返回的点不是等间距的) - Tropilio

1

浏览集合并提取路径和顶点并不是最直接或最快的事情。返回的Contour对象实际上具有通过cs.allsegs返回的段的属性,该属性返回形状的嵌套列表[level][element][vertex_coord]:

num_levels = len(cs.allsegs)
num_element = len(cs.allsegs[0])  # in level 0
num_vertices = len(cs.allsegs[0][0])  # of element 0, in level 0
num_coord = len(cs.allsegs[0][0][0])  # of vertex 0, in element 0, in level 0

因此,所有路径的顶点可以提取为:
cs.allsegs[i][j]  # for element j, in level i

请参考: https://matplotlib.org/3.1.1/api/contour_api.html

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接