2017-05-15 2 views
0

여러 개의 매개 변수로 일부 플롯을 만들어야하고 매트 플롯 슬라이더로 더 대화식으로 만들도록 선택했습니다. 내 실제 작업 전에 어떤 연습을 위해 나는 그것을 상대적으로 간단하게 만들려고했지만 슬라이더는 작동하지 않는다. 다음은 here에서 영감을받은 코드입니다.Martplotlib 슬라이더가 작동하지 않습니다.

코드 :

import matplotlib 
import matplotlib.pyplot as plt 
import matplotlib.widgets as mw 
from scipy import stats 


mu = 1 
sigma = 3 

a = 2 
b = 3 
axis_color = 'lightgoldenrodyellow' 


x = [i for i in range(-100,100,1)] 

normal_pdf = stats.norm.pdf(x, mu, sigma) 
a_normal_pdf = [i*a for i in normal_pdf] 
ab_normal_pdf = [i*b*a for i in normal_pdf] 


fig = plt.figure() 

ax1 = fig.add_subplot(221) 
ax2 = fig.add_subplot(222) 
ax3 = fig.add_subplot(223) 
ax4 = fig.add_subplot(224) 
ax4.axis('off') 
#sliders 
a_slider_ax = fig.add_axes([0.6, 0.25, 0.25, 0.03], axisbg=axis_color) 
a_slider = mw.Slider(a_slider_ax, 'a', 1, 100, valinit = a) 
b_slider_ax = fig.add_axes([0.6, 0.4, 0.25, .03], axisbg = axis_color) 
b_slider = mw.Slider(b_slider_ax, 'b', 1, 100, valinit = b) 
#function for sliders 
def sliders_on_change(val): 
    a_normal_pdf.set_ydata([x*a_slider for x in normal_pdf]) 
    ab_normal_pdf.set_ydata([x*a_slider*b_slider for x in normal_pdf]) 
    fig.canvas.draw_idle() 
a_slider.on_changed(sliders_on_change) 
b_slider.on_changed(sliders_on_change) 


ax1.plot(x, normal_pdf, 'r-') 
ax2.plot(x, a_normal_pdf, 'bo') 
ax3.plot(x, ab_normal_pdf, 'g*') 

plt.show() 

나는 완전히 내가뿐만 아니라 스파이더와 jupyter에 차이가 그것을 시도하지 않기 때문에 슬라이더, here로 대신 유휴 문제 때문에 그것의 아마 문제를 작동하는 방법을 이해하지 않습니다. 슬라이더로 이동할 수는 있지만 a_normal_pdf 또는 ab_normal_pdf을 변경할 수 없습니다.

답변

1

당신은이 코드에서 문제가 있습니다 슬라이더의 현재의 값 대신 슬라이더 객체 a_slider를 사용

  1. a_slider.val

  2. Line2D 플롯 객체의 y 데이터를 변경 set_ydata 방법 (수정할 수 있으려면 변수 p1에 저장했습니다.)

수정 된 코드 (도움이되기를 바랍니다)

import matplotlib 
import matplotlib.pyplot as plt 
import matplotlib.widgets as mw 
from scipy import stats 


mu = 1 
sigma = 3 

a = 2 
b = 3 
axis_color = 'lightgoldenrodyellow' 


x = [i for i in range(-100,100,1)] 

normal_pdf = stats.norm.pdf(x, mu, sigma) 
a_normal_pdf = [i*a for i in normal_pdf] 
ab_normal_pdf = [i*b*a for i in normal_pdf] 


fig = plt.figure() 

ax1 = fig.add_subplot(221) 
ax2 = fig.add_subplot(222) 
ax3 = fig.add_subplot(223) 
ax4 = fig.add_subplot(224) 
ax4.axis('off') 
#sliders 
a_slider_ax = fig.add_axes([0.6, 0.25, 0.25, 0.03], axisbg=axis_color) 
a_slider = mw.Slider(a_slider_ax, 'a', 1, 100, valinit = a) 
b_slider_ax = fig.add_axes([0.6, 0.4, 0.25, .03], axisbg = axis_color) 
b_slider = mw.Slider(b_slider_ax, 'b', 1, 100, valinit = b) 
#function for sliders 
def sliders_on_change(val): 
    p1.set_ydata([x*a_slider.val for x in normal_pdf]) 
    p2.set_ydata([x*a_slider.val*b_slider.val for x in normal_pdf]) 
    fig.canvas.draw_idle() 

a_slider.on_changed(sliders_on_change) 
b_slider.on_changed(sliders_on_change) 


p1,=ax1.plot(x, normal_pdf, 'r-') 
p2,=ax2.plot(x, a_normal_pdf, 'bo') 
p3,=ax3.plot(x, ab_normal_pdf, 'g*') 

plt.show() 
+0

큰 답변이지만, p1, = *** 및 p1 = ***의 차이점은 무엇입니까? 쉼표는 무엇을합니까? – Bobesh

+0

@Bobesh 튜플에 결과를 할당 할 수 있습니다 (이 질문은 [파이썬 코드입니다. 쉼표 연산자입니까?] (http://stackoverflow.com/questions/16037494/python-code-is-it-comma-operator) – user2314737

관련 문제