我在找(但不是画画!)某些数据的等高线:
from pprint import pprint
import matplotlib.pyplot
z = [[0.350087, 0.0590954, 0.002165], [0.144522, 0.885409, 0.378515],
[0.027956, 0.777996, 0.602663], [0.138367, 0.182499, 0.460879],
[0.357434, 0.297271, 0.587715]]
cn = matplotlib.pyplot.contour(z)
我知道cn
包含了我想要的等高线,但我似乎无法得到
对他们来说。我试过几种方法:
print dir(cn)
pprint(cn.collections[0])
print dir(cn.collections[0])
pprint(cn.collections[0].figure)
print dir(cn.collections[0].figure)
无济于事。我知道cn
是一个ContourSet
,而cn.collections
是一个数组
我认为LineCollection
是一个线段数组,但是
无法找出如何提取这些段。
我的最终目标是创建一个KML文件,该文件在一个世界上绘制数据 地图,以及数据的等高线。
但是,因为我的一些数据点很接近 很遥远,我需要真正的多边形(线串)组成 轮廓,不仅仅是轮廓的光栅化图像。
我有点惊讶qhull
没有这样做。
使用Mathematica的ListContourPlot
,然后导出为SVG,但是
想用一些开源的东西。
我不能使用著名的CONREC算法,因为我的数据不在 网格(对于给定的x值,并不总是有多个y值,并且 反之亦然)。
解决方案不必使用python,但必须是开源的 在Linux上运行。
我建议使用scikit图像find_contours
它返回给定级别的轮廓列表。
matplotlib._cntr
已从matplotlib中删除(请参见here)。您可以通过循环集合和路径并使用^{} 的
iter_segments()
方法来获取顶点。下面是一个函数,它将顶点作为一组嵌套的等高线列表、等高线截面和x、y顶点数组返回:
编辑:
也可以使用未记录的
matplotlib._cntr
C模块计算轮廓,而无需绘制任何内容:轮廓数据似乎位于
plt.contour()
函数返回的QuadContourSet
对象的.allsegs
属性中。.allseg
属性是所有级别的列表(可以在调用plt.contour(X,Y,Z,V)
时指定)。对于每个级别,您都会得到一个numpy nx2阵列的列表。在上面的例子中,只给出一个级别,所以
len(C.allsegs)
=1。你得到:等高线图
提取的曲线
相关问题 更多 >
编程相关推荐