我想从均匀分布的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()是:
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.path
或者,是否有其他选择matplotlib或更好的选择numpy/scipy做类似的事情?理想的做法是获取描述该线的(x,y)对的高分辨率矢量,该矢量可用于进一步分析,因为通常我的数据集并不像上面的示例那样小或简单。
matplotlib
numpy
scipy
对于给定的路径,您可以得到以下几点:
p = cs.collections[0].get_paths()[0] v = p.vertices x = v[:,0] y = v[:,1]