Matplotlib使用微件按钮更改散点图的基础数据

uplii1fm  于 2022-12-13  发布在  其他
关注(0)|答案(1)|浏览(104)

我有一个图,我想在其中绘制以下两个数据集

x1,y1 = np.random.normal(0,1, (2,20)) # dataset 1
x2,y2 = np.random.normal(0,1, (2,20))

# Next, I create a plot and the PathCollection  from the scatter
fig, ax = plt.subplots()
ax = plt.gca()
p =  ax.scatter(x1, y1)

# I create two functions, each set the data using a different data set
def set_data1(event):
    p.set_offsets(x1, y2)
    plt.draw()
    
def set_data2(event):
    p.set_offsets(x2, y2)
    plt.draw()

# Location for the buttons
btn_1_loc = fig.add_axes( [0.02, 0.90, 0.2, 0.075])
btn_2_loc = fig.add_axes( [0.02, 0.80, 0.2, 0.075])

# Now, actually add the buttons
btn_1 = Button(btn_1_loc, 'Button 1')
btn_1.on_clicked(set_data1)

btn_2 = Button(btn_2_loc, 'Button 2')
btn_2.on_clicked(set_data2)

这将创建一个带有按钮的图。当我单击按钮时,数据不会改变。如果我改为用p.set_facecolor(color1)color2更改点的颜色,图会改变并更新。
如何使用这两个按钮更改点的(x,y)位置?

oxiaedzo

oxiaedzo1#

set_offsets接受一个2D数组,您传递的是两个单独的数组。
解决方法:

def set_data1(event):
    p.set_offsets(np.column_stack((x1, y1)))
    plt.draw()

def set_data2(event):
    p.set_offsets(np.column_stack((x2, y2)))
    plt.draw()

相关问题