Я думаю, вам не хватало только небольшой детали в вашем коде, а именно то, что вы хотите, чтобы ползунок принимал только дискретные значения. Если это то, чего вы хотели достичь, попробуйте этот код:
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'
, поэтому ползунок принимает только целые значения.
Edit
Если вы хотите добавить текстовое поле для выбора слайда число, то вам нужно будет добавить новые функции и объекты, например:
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)
например. Окончательный график будет выглядеть так: 