Matplotlib中如何一次性生成等高线并提取多条等值线数据
一次性提取多条等高线等值线坐标的方法
直接在调用plt.contour时传入所有需要提取的等值线数值列表,就能只构建一次等高线对象,再通过该对象的属性批量获取对应数据,避免重复构建。
示例代码
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]] # 定义所有需要提取的等值线数值 target_levels = [4, 9.5, 12] # 一次性构建包含所有目标等值线的等高线对象 cs = plt.contour(x, y, m, target_levels) # 按等值线数值整理坐标数据 contour_coords = {} for level_idx, level_val in enumerate(cs.levels): # 获取当前等值线的所有路径(多段线会拆成多个路径) paths = cs.collections[level_idx].get_paths() path_coords_list = [] for path in paths: # 提取路径的顶点坐标,格式为二维数组[[x1,y1], [x2,y2], ...] path_coords_list.append(path.vertices) contour_coords[level_val] = path_coords_list # 输出结果示例 for val, coords in contour_coords.items(): print(f"等值线 {val} 的坐标集合:") for idx, seg in enumerate(coords): print(f" 线段 {idx+1}:{seg}") plt.show()
关键说明
plt.contour的第四个参数直接传目标数值列表,matplotlib会一次性生成所有指定的等值线,仅构建一次等高线对象。cs.levels返回传入的所有等值线数值,顺序和target_levels完全一致。cs.collections是等值线集合的列表,每个元素对应一条等值线,索引与cs.levels一一对应。- 若某条等值线是断开的多段,
get_paths()会返回多个路径对象,每个路径的vertices属性就是该段的坐标点数组。
内容的提问来源于stack exchange,提问作者sing a song
相关产品推荐
相关产品推荐

