Я пытаюсь создать фигуру с радио-кнопками сбоку и ползунком внизу. На рисунке будут отображены «необработанные» данные и «отфильтрованные» данные. Сами данные представляют собой словарь, а переключатели предназначены для отображения нового графика на основе значения связанных клавиш. Ползунок предназначен для изменения частоты среза отфильтрованных данных. Код, который я использовал для генерации рисунка, приведен ниже:
import numpy as np
import scipy as sp
from scipy import signal
import matplotlib.pyplot as plt
from matplotlib.widgets import Slider, Button, RadioButtons
dataRaw = {'ForceX': [8,4,6,6,3,3,6,7,9,2,4,5,6,7,8,3,6,3,2,3,6,7,9,6,4,6,7,2],
'ForceY': [3,4,5,6,2,3,5,6,7,8,4,3,6,8,1,6,3,6,8,9,0,4,6,8,4,2,4,7],
'ForceZ': [1,2,4,7,3,4,7,8,3,6,9,8,4,4,6,6,3,6,8,0,2,4,6,8,0,4,6,2]}
a = {}
b = {}
for key in dataRaw.keys():
b[key], a[key] = sp.signal.butter(4, 0.015, btype='lowpass')
dataFilt = {key: sp.signal.filtfilt(b[key], a[key], dataRaw[key]) for key in dataRaw.keys()}
## Plot Intial Data
fig, ax = plt.subplots()
plt.plot(dataRaw['ForceX'])
l = {key: plt.plot(dataFilt['ForceX'])[0] for key in dataRaw.keys()}
## Create Radio Buttons
rax = fig.add_axes([0.025, 0.5, 0.15, 0.15])
radio = RadioButtons(rax, sorted(dataRaw.keys()), active=0)
## Create Function to cycle through graphs
def chooseGraph(graph):
global l
ax.clear()
ax.plot(dataRaw[graph])
ax.plot(dataFilt[graph])
fig.canvas.draw_idle()
radio.on_clicked(chooseGraph)
## Set up Slider Properties
axcolor = 'lightgoldenrodyellow'
axFrame = plt.axes([0.25, 0.1, 0.65, 0.03], facecolor=axcolor)
sFrame = Slider(axFrame, 'Cut Off', 1, 30.0, 3)
def update(val):
frame = sFrame.val
aNew = {}
bNew = {}
for key in dataRaw.keys():
bNew[key], aNew[key] = sp.signal.butter(4, float(frame)/(1000/2), btype='lowpass')
l[key].set_ydata(sp.signal.filtfilt(bNew[key], aNew[key], dataRaw[key]))
fig.canvas.draw_idle()
sFrame.on_changed(update)
plt.show()
Когда я выполняю этот код, я успешно могу циклически перемещаться по словарям и правильно отображать графики, однако я не могу использовать ползунок.
Чтобы быть более точным, ползунок отображает все три словарных элемента на первом графике, когда я хочу, чтобы он отображал только значения, основанные на выбранной клавише.
Я хотел бы иметь возможность выбрать соответствующий график (необработанные и отфильтрованные данные) на основе соответствующей радиокнопки (это работает), а затем я хотел бы иметь возможность настроить ползунок, чтобы увидеть эффект слайдер имеет отфильтрованные данные.
Заранее спасибо!