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

如何获取Matplotlib等高线标签位置,在另一组等高线绘制空白区域?

提取Matplotlib等高线标签位置并在另一组等高线处绘制空白

你可以通过捕获clabel()返回的标签对象,提取每个标签的位置,然后在对应位置绘制白色图形遮挡另一组等高线,实现仅保留一组标签、且另一组等高线在标签位置留空的效果。

修改后的代码如下:

import numpy
import matplotlib.pyplot as plt

delta = 0.025
x = numpy.arange(-3.0, 3.0, delta)
y = numpy.arange(-2.0, 2.0, delta)
X, Y = numpy.meshgrid(x, y)
  
Z1 = numpy.exp(-X**2 - Y**2)
Z2 = numpy.exp(-(X - 1)**2 - (Y - 1)**2)
Z = (Z1 - Z2) * 2

Z2 = Z * 1.1

# 添加等高线并捕获标签对象
fig, ax = plt.subplots()
CS = ax.contour(X, Y, Z)
CS2 = ax.contour(X, Y, Z2)
# 调用clabel并保存返回的标签实例
labeler = ax.clabel(CS, inline=1, fmt='%1d', fontsize=10)
ax.set_title('Simplest default with labels')

# 提取每个标签的位置,在CS2对应位置绘制白色圆形遮挡
for label in labeler:
    # 获取标签的中心坐标
    x_pos, y_pos = label.get_position()
    # 绘制白色圆形,半径可根据字体大小调整
    circle = plt.Circle((x_pos, y_pos), 0.15, color='white', zorder=2)
    ax.add_patch(circle)

plt.show()

关键步骤说明:

  • 调用ax.clabel()时保存返回值labeler,该对象包含所有添加到CS上的标签实例。
  • 遍历每个标签,通过label.get_position()获取标签的中心坐标。
  • 使用plt.Circle()创建白色圆形(也可替换为矩形plt.Rectangle()),设置zorder=2确保图形在等高线之上,完全遮挡CS2的线条。
  • 圆形半径可根据字体大小和视觉需求调整,保证空白区域刚好覆盖穿过标签的CS2等高线。

如果需要更精准匹配CS2中等高线的位置,也可以根据标签对应的等高线数值,定位CS2中同数值的等高线段后进行遮挡,但上述方法已能满足大部分场景需求。

内容的提问来源于stack exchange,提问作者user2256085

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 22:12:48