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
相关产品推荐
相关产品推荐

