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

Matplotlib点击指定点修改颜色功能异常问题排查

问题修复:Matplotlib散点图点击激活单个点并打印标签

问题原因

你的代码里犯了一个关键错误:point_choisi.set_color()是给整个散点集合设置统一颜色,不是单个点。循环过程中,每次判断都会把所有点改成红色或蓝色,最后只有循环的最后一次操作生效——当点击第9个点(索引8)时,循环最后一步是把所有点设为红色;点击其他点时,循环到后面的i不等于index时,又把所有点改回蓝色,所以看起来没反应。

修复后的代码

import matplotlib.pyplot as plt

fig, ax = plt.subplots()

liste_points = [(1, 1, "a"), (2, 1, "b"), (3, 1, "c"), (1, 2, "d"), (2, 2, "e"), (3, 2, "f"), (1, 3, "g"), (2, 3, "h"), (3, 3, "i")]
x, y, labels = zip(*liste_points)
# 初始化颜色数组,全部设为蓝色
colors = ["blue"] * len(liste_points)
sc = ax.scatter(x, y, s=10, c=colors, picker=5)

def onpick(event):
    index = event.ind[0]
    # 重置所有点为蓝色
    for i in range(len(colors)):
        colors[i] = "blue"
    # 将选中的点设为红色
    colors[index] = "red"
    # 更新散点图的颜色
    sc.set_facecolors(colors)
    # 打印选中点的标签
    print(f"选中的标签:{labels[index]}")
    fig.canvas.draw_idle()

fig.canvas.mpl_connect('pick_event', onpick)

plt.show()

关键修改说明

  • 新增colors数组单独控制每个点的颜色,替代散点集合的统一颜色设置
  • onpick函数里先重置所有点为蓝色,再单独修改选中点的颜色,确保始终只有一个激活点
  • 使用sc.set_facecolors(colors)更新整个散点图的颜色,让单个点的颜色修改生效
  • 通过labels[index]直接获取并打印选中点的关联标签

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 07:42:42