Уведомления

Группа в Telegram: @pythonsu

#1 Ноя. 4, 2015 20:32:24

ia_bobrova94
Зарегистрирован: 2015-11-04
Сообщения: 1
Репутация: +  0  -
Профиль   Отправить e-mail  

slaider для нескольких графиков в окне

Возникла задача: прикрепить один слайдер к нескольким графикам в окне
Прикрепляю код, при запуске которого слайдер меняет функцию только на одном из графиков.
Возможно ли прикрепить один слайдер к нескольким графикам? Если да, то какой фрагмент и где нужно вставить?
Уж очень хочется сделать решение задачи нагляднее…
Заранее огромное спасибо!

import numpy as np
import matplotlib.pyplot as plt
from matplotlib.widgets import Slider, Button
#fig, ax = plt.subplots()
fig = plt.figure(figsize=(10, 10))
plt.subplots_adjust(left=0.1, bottom=0.25)
x = np.arange(-10.0, 10.0, 0.01)
i0 = 23.8 # 0-80
h0 = 2	# 0 - 10
d0 = 1	# 0 - 10
e = i0 * h0 * (pow(h0 * h0 + (x + 0.5 * d0) * (x + 0.5 * d0), -1.5) + pow(h0 * h0 + (x - 0.5 * d0) * (x - 0.5 * d0), -1.5))
plt.subplot(121)
l, = plt.plot(x, e, lw = 2, color='red')
plt.axis([-10, 10, 0, 12])
plt.xlabel('$x$, m')
plt.ylabel('$E(x)$, lk')
plt.grid(True)
plt.subplot(122)
k, = plt.plot([(-0.5) * d0,0.5 * d0], [h0,h0], 'ro')
plt.axis([-10, 10, 0, 12])
plt.grid(True)
# some stragne color dont change
axcolor = 'lightgoldenrodyellow'
# add slider appearance x y width height
axI = plt.axes([0.10, 0.02, 0.65, 0.03], axisbg=axcolor)
axH  = plt.axes([0.10, 0.07, 0.65, 0.03], axisbg=axcolor)
axD = plt.axes([0.10, 0.12, 0.65, 0.03], axisbg=axcolor)
# add slider - appearance name step max initial value
sliderI = Slider(axI, '$I$, kd', 0.1, 80.0, valinit=i0)
sliderH = Slider(axH, '$h$, m', 0.1, 10.0, valinit=h0)
sliderD = Slider(axD, '$d$, m', 0.1, 10.0, valinit=d0)
# update slider
def update(val):
# get new y and x values from sliders
    i0 = sliderI.val
    h0 = sliderH.val
    d0 = sliderD.val
# set this new data into function
    l.set_ydata(i0 * h0 * (pow(h0 * h0 + (x + 0.5 * d0) * (x + 0.5 * d0), -1.5) + pow(h0 * h0 + (x - 0.5 * d0) * (x - 0.5 * d0), -1.5)))
    k.set_ydata([(-0.5) * d0,0.5 * d0], [h0,h0])
    fig.canvas.draw_idle()
# if slider changed do update
sliderI.on_changed(update)
sliderH.on_changed(update)
sliderD.on_changed(update)
# reset function
resetax = plt.axes([0.85, 0.010, 0.1, 0.04])
button = Button(resetax, 'Reset', color=axcolor, hovercolor='0.975')
def reset(event):
    sliderI.reset()
    sliderD.reset()
    sliderH.reset()
button.on_clicked(reset)
plt.show()

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version