Python 2.7 | Радиокнопка для изменения графиков | Слайдер для фильтрации данных - PullRequest
0 голосов
/ 31 августа 2018

Я пытаюсь создать фигуру с радио-кнопками сбоку и ползунком внизу. На рисунке будут отображены «необработанные» данные и «отфильтрованные» данные. Сами данные представляют собой словарь, а переключатели предназначены для отображения нового графика на основе значения связанных клавиш. Ползунок предназначен для изменения частоты среза отфильтрованных данных. Код, который я использовал для генерации рисунка, приведен ниже:

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()

Когда я выполняю этот код, я успешно могу циклически перемещаться по словарям и правильно отображать графики, однако я не могу использовать ползунок.

Чтобы быть более точным, ползунок отображает все три словарных элемента на первом графике, когда я хочу, чтобы он отображал только значения, основанные на выбранной клавише.

Я хотел бы иметь возможность выбрать соответствующий график (необработанные и отфильтрованные данные) на основе соответствующей радиокнопки (это работает), а затем я хотел бы иметь возможность настроить ползунок, чтобы увидеть эффект слайдер имеет отфильтрованные данные.

Заранее спасибо!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...