如何获取轮廓图中绘制的线的(x,y)值?

19 投票
2 回答
10626 浏览
提问于 2025-04-15 15:02

有没有简单的方法可以获取像这样绘制的轮廓线的 (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 个回答

2

遍历集合并提取路径和顶点并不是最简单或最快的方法。返回的轮廓对象实际上有一个属性可以通过 cs.allsegs 来获取,这个属性返回一个嵌套列表,形状是 [层级][元素][顶点坐标]:

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

21

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

cs.collections[0].get_paths()

要获取坐标的NumPy数组,可以使用Path.vertices这个属性。

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

撰写回答