如何从 matplotlib 等值图对象中提取等值线坐标数据和属性值

您所在的位置:网站首页 在excel中如何提取年和月的公因数 如何从 matplotlib 等值图对象中提取等值线坐标数据和属性值

如何从 matplotlib 等值图对象中提取等值线坐标数据和属性值

2023-12-27 07:34| 来源: 网络整理| 查看: 265

关键技术点

在使用 matplotlib 作图时,我们经常遇到如下的代码:

fig, ax = plt.subplots() CS = ax.contour(X, Y, Z)

即,调用画图接口时候,返回了一个对象 CS。要想提取等值线坐标数据和属性值,就要从 CS 对象的方法属性入手。

通过搜索,发现 CS.collections 和 CS.levels 两个属性分别包含了等值线的坐标数据和属性值,并且他们的顺序是一样的。

思路来源

stackoverflow 上的两篇重要的回答:

collections 和 levels 的结构相同,分别存储了等值线和属性值

遍历 collection 和 levels 的方法

一个示例

参考上面的连接,我设计了一个下面的示例,可以测试提取等值图的等值线坐标数据和属性值。

import numpy as np import matplotlib.pyplot as plt #从等值线中提取坐标点和属性值 def get_contour_verts(cn): contours = [] idx = 0 # for each contour line #print(cn.levels) for cc,vl in zip(cn.collections,cn.levels): # for each separate section of the contour line for pp in cc.get_paths(): paths = {} paths["id"]=idx paths["type"]=0 paths["value"]=float(vl) # vl 是属性值 xy = [] # for each segment of that section for vv in pp.iter_segments(): xy.append([float(vv[0][0]),float(vv[0][0])]) #vv[0] 是等值线上一个点的坐标,是 1 个 形如 array[12.0,13.5] 的 ndarray。 paths["coords"]=xy contours.append(paths) idx +=1 return contours # 等值线绘图及提取数据示例 delta = 0.025 x = np.arange(-3.0, 3.0, delta) y = np.arange(-2.0, 2.0, delta) X, Y = np.meshgrid(x, y) Z1 = np.exp(-X**2 - Y**2) Z2 = np.exp(-(X - 1)**2 - (Y - 1)**2) Z = (Z1 - Z2) * 2 fig, ax = plt.subplots() CS = ax.contour(X, Y, Z) ax.clabel(CS, inline=1, fontsize=10) ax.set_title('Simplest default with labels') plt.close() # 打印提取的等值线坐标点和属性值 # 按每条线(段)提取,顺序标出 id print(get_contour_verts(CS))

 



【本文地址】


今日新闻


推荐新闻


    CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3