如果我有一些术语错了,我道歉。
我试图建立一个选择器,让我/未来的用户可以为一个相对较大的数据集(1000行,10行)切片一个框架。
理想情况下,目标是将每个子图的x坐标传递给字典,其中dict.keys将是子图编号,例如,0表示第一个,1表示第二个等
一个额外的复杂性是,我在不同的数据集上有不同数量的子图,所以我希望它能自动分配这些标签。
到目前为止,我已经将我的“returned_points”设置为嵌套列表。现在,我可以做的是将“click”传递给这个列表(列表),并将字符串分配给子图的正确索引。我还可以将点信息传递给一个“flat”列表,该列表不告诉我点来自哪个子图。
我不能做的是让艺术家数据-我的意思是我点击的图中的点的值-被传递到嵌套列表中的正确列表。
我一直在跟踪这些问题的示例:herehere和matplotlib演示here
MWE:
def test1(event):
for i in list(range(len(fig.axes))):
if event.inaxes == fig.axes[i]:
test[i].append("click")
def test2(event):
for i in list(range(len(fig.axes))):
if event.inaxes == fig.axes[i]:
thisline = event.artist
xdata = thisline.get_xdata()
ind = event.ind
vals[i].append(xdata[ind])
x = np.random.rand(100)
y = np.random.rand(100)
fig, ax = plt.subplots(2,1)
test = [[] for i in fig.axes]
vals = [[] for i in fig.axes]
for ax in fig.axes:
ax.plot(x, y, "o")
fig.canvas.mpl_connect("button_press_event",test1)
fig.canvas.mpl_connect("button_press_event",test2)
print(test)
print(vals)
在顶部图中单击四次,在下部图中单击一次将返回:
[['click', 'click', 'click', 'click'], ['click']] # passing a string works fine
[[], []] # getting the artist data to write to the list does not work...
基本的“平面”版本:
def onpick(event):
thisline = event.artist
xdata = thisline.get_xdata()
ind = event.ind
picker_tmp.append(xdata[ind])
fig, ax = plt.subplots(2,1)
picker_tmp = []
for ax in fig.axes:
ax.plot(x, y, "o", picker=True)
fig.canvas.mpl_connect('pick_event', onpick)
print(picker_tmp)
提供:
[array([0.249527]), array([0.36171572]), array([0.47993459]), array([0.8400918]), array([0.4248754])]
# getting artist data works fine here?!...
1条答案
按热度按时间rqenqsqc1#
感谢@TrentonMcKinney指出错误。我混淆了“pick_event”和“button_press_event”。不知道为什么“pick_event”不适用于此。
工作代码: