You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.23 09:57:27