gpt4 book ai didi

python - 单击更改子图中所选数据点的颜色

转载 作者:行者123 更新时间:2023-12-04 04:19:44 27 4
gpt4 key购买 nike

美好的一天 Stack-Overflow,

我是一个相对的 python 初学者,我坚持执行以下任务:我想通过点击数据点本身来更改数据点的颜色。我通过创建随机子图来相对地走得更远,但我可以改变最后一个子图中点的颜色(点击其他地方也只会改变最后一个图中的颜色)。我错过了什么?

import numpy as np
import matplotlib.pyplot as plt
import random
import sys


fig, axes = plt.subplots(nrows=5, ncols=3, sharex=True, sharey=True)
xlim = (0, 30)
ylim = (0, 15)
plt.xticks(np.arange(0, 15, 5))
plt.yticks(np.arange(0, 15, 5))
plt.xticks(np.arange(0, 30, 5))
plt.setp(axes, xlim=xlim, ylim=ylim)

for i in range(0, 5, 1):
for j in range(0, 3, 1):
X_t = np.random.rand(10, 4) * 20
points = axes[i][j].scatter(X_t[:, 0], X_t[:, 1],
facecolors=["C0"] * len(X_t), edgecolors=["C0"] * len(X_t), picker=True)


def onpick(event):
print(X_t[event.ind], "clicked")
points._facecolors[event.ind, :] = (1, 1, 0, 1)
points._edgecolors[event.ind, :] = (1, 0, 0, 1)
fig.canvas.draw()


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


plt.show()

似乎 event.ind 中包含的信息不正确,我在错误的时间请求该信息。

我很高兴能得到任何帮助!

您好!

(根据建议的最佳实践进行编辑)

最佳答案

您需要为不同的子图保存所有点并通过检查event.artist 您当前正在单击的子图 ( See this question )

import numpy as np
import matplotlib.pyplot as plt


fig, axes = plt.subplots(nrows=5, ncols=3, sharex=True, sharey=True)
xlim = (0, 30)
ylim = (0, 15)
plt.xticks(np.arange(0, 15, 5))
plt.yticks(np.arange(0, 15, 5))
plt.xticks(np.arange(0, 30, 5))
plt.setp(axes, xlim=xlim, ylim=ylim)

points_list = [] ###
for i in range(0, 5, 1):
for j in range(0, 3, 1):
X_t = np.random.rand(10, 4) * 20
points_list.append(axes[i][j].scatter(X_t[:, 0], X_t[:, 1],
facecolors=["C0"] * len(X_t), edgecolors=["C0"] * len(X_t), picker=True)) ###


def onpick(event):
print(event.artist, X_t[event.ind], "clicked")
for points in points_list:
if event.artist == points: ###
points._facecolors[event.ind, :] = (1, 1, 0, 1)
points._edgecolors[event.ind, :] = (1, 0, 0, 1)

fig.canvas.draw()


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

从检查 event.artist == points 可以看出,您可以直接使用 event.artist 而不是将所有点保存在列表中:

def onpick(event):
print(event.artist, X_t[event.ind], "clicked")
event.artist._facecolors[event.ind, :] = (1, 1, 0, 1)
event.artist._edgecolors[event.ind, :] = (1, 0, 0, 1)
fig.canvas.draw()

关于python - 单击更改子图中所选数据点的颜色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59636197/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com