通过滑块更新绘图(python)

2024-09-28 04:47:24 发布

您现在位置:Python中文网/ 问答频道 /正文

我得到了一个看起来像data = [[1, 2, 3], [4, 5, 6], [7, 9, 10]....]和x值x_values = np.arange(3)的数据数组

我想一次显示一个子数组的绘图,并在我的图中加入一个滑块,其值应表示相应子数组的索引。因此,当我将滑块从示例1更改为2时,它应该根据x值从绘图data[1]更改为绘图data[2]

我的代码如下所示:

#Initial plot
fig, ax = plt.subplots()
i = 0
plt.subplots_adjust(bottom = 0.15)
ax.plot(x_values, data[i])

#Update function
def update_wave(val):
    i = int(sliderwave.val)

    x_values = np.arange(3)
    ax.cla()
    ax.plot(x_values, data[i))
    fig.canvas.draw_idle()

#Sliders
axwave = plt.axes([0.25, 0.05, 0.5, 0.03])
sliderwave = Slider(axwave, 'Event No.', 0, 100, valinit=0, valfmt='%1.0f')

update_wave(i)
sliderwave.on_changed(update_wave)

它不是那样工作的。我想有些事情没有道理。如果你能帮忙,我将不胜感激


Tags: 绘图dataplotnpfigupdateplt数组
1条回答
网友
1楼 · 发布于 2024-09-28 04:47:24

我认为您在代码中只遗漏了一个小细节,就是您希望滑块只获取离散值。如果这正是您想要实现的,请尝试以下代码:

import numpy as np
import matplotlib.pyplot as plt
from matplotlib.widgets import Slider

# Define data set

DATA = np.random.uniform(1, 10, 300).reshape(-1, 3)
X_VALUES = np.arange(3)

# Initial plot

fig, ax = plt.subplots()
plt.subplots_adjust(bottom=0.15)
ax.plot(X_VALUES, DATA[0], '-o')

# Update function


def update_wave(val):
    idx = int(sliderwave.val)
    ax.cla()
    ax.plot(X_VALUES, DATA[idx], '-o')
    fig.canvas.draw_idle()


# Sliders

axwave = plt.axes([0.25, 0.05, 0.5, 0.03])

sliderwave = Slider(axwave, 'Event No.', 0, 100, valinit=0, valfmt='%d')
sliderwave.on_changed(update_wave)

plt.show()

在这个例子中,我生成了一个随机数据集来绘图。注意,在Slider对象中,我设置了可选参数valfmt='%d',因此滑块只接受整数值

编辑

如果要包含一个文本框来选择幻灯片编号,则需要添加新功能和对象,例如:

def submit(text):
    idx = int(text)
    ax.cla()
    ax.plot(X_VALUES, DATA[idx], '-o')
    fig.canvas.draw_idle()

axtext = plt.axes([0.25, 0.15, 0.5, 0.03])
text_box = TextBox(axtext, 'Slide No.')
text_box.on_submit(submit)

如果您想让它与之前定义的滑块一起工作,那么您还必须使用plt.subplots_adjust(bottom=0.25)修改子地块的形状。最终的绘图如下所示: enter image description here

相关问题 更多 >

    热门问题