小编典典

matplotlib-从轮廓线提取数据

python

我想从均匀分布的2D数据(类似图像的数据)的单个轮廓中获取数据。

基于在类似问题中找到的示例:如何获得轮廓图(matplotlib)绘制的线的(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])
>>> cs.collections[0].get_paths()

该调用的结果cs.collections[0].get_paths()是:

[Path([[ 4.          1.625     ]
 [ 3.25        2.        ]
 [ 3.          2.16666667]
 [ 2.16666667  3.        ]
 [ 2.          3.25      ]
 [ 1.625       4.        ]], None)]

基于这些图,此结果是有意义的,并且似乎是轮廓线的(y,x)对的集合。

除了手动遍历此返回值,提取直线的坐标并组装线的数组以外,还有更好的方法从matplotlib.path对象取回数据吗?从中提取数据时是否有陷阱要注意matplotlib.path

或者,是否有其他选择matplotlib或更好的选择numpy/scipy做类似的事情?理想的做法是获取描述该线的(x,y)对的高分辨率矢量,该矢量可用于进一步分析,因为通常我的数据集并不像上面的示例那样小或简单。


阅读 324

收藏
2020-12-20

共1个答案

小编典典

对于给定的路径,您可以得到以下几点:

p = cs.collections[0].get_paths()[0]
v = p.vertices
x = v[:,0]
y = v[:,1]
2020-12-20