问题描述
我想从均匀分布的二维数据(类似图像的数据)的单个轮廓中获取数据.
基于在类似问题中找到的示例:如何获取绘制的线的 (x,y) 值通过等高线图(matplotlib)?
>>>导入 matplotlib.pyplot 作为 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. ]],无)]
根据这些图,这个结果是有道理的,似乎是等高线的 (y,x) 对的集合.
除了手动循环这个返回值、提取坐标和组装线的数组之外,还有什么更好的方法可以从 matplotlib.path
对象中取回数据?从 matplotlib.path
中提取数据时是否有需要注意的陷阱?
或者,在 matplotlib
或更好的 numpy
/scipy
中是否有替代方案来做类似的事情?理想的情况是获得描述线的 (x,y) 对的高分辨率向量,可用于进一步分析,因为通常我的数据集并不像上面的示例那样小或简单.
对于给定的路径,你可以获得这样的点数:
p = cs.collections[0].get_paths()[0]v = p.verticesx = v[:,0]y = v[:,1]
I would like to get data from a single contour of evenly spaced 2D data (an image-like data).
Based on the example found in a similar question: How can I get the (x,y) values of the line that is ploted by a contour plot (matplotlib)?
>>> 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()
The result of this call into cs.collections[0].get_paths()
is:
[Path([[ 4. 1.625 ]
[ 3.25 2. ]
[ 3. 2.16666667]
[ 2.16666667 3. ]
[ 2. 3.25 ]
[ 1.625 4. ]], None)]
Based on the plots, this result makes sense and appears to be collection of (y,x) pairs for the contour line.
Other than manually looping over this return value, extracting the coordinates and assembling arrays for the line, are there better ways to get data back from a matplotlib.path
object? Are there pitfalls to be aware of when extracting data from a matplotlib.path
?
Alternatively, are there alternatives within matplotlib
or better yet numpy
/scipy
to do a similar thing? Ideal thing would be to get a high resolution vector of (x,y) pairs describing the line, which could be used for further analysis, as in general my datasets are not a small or simple as the example above.
For a given path, you can get the points like this:
p = cs.collections[0].get_paths()[0]
v = p.vertices
x = v[:,0]
y = v[:,1]
这篇关于matplotlib - 从等高线中提取数据的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!