Как эффективнее использовать взаимодействие с ipywidgets для построения графиков данных? - PullRequest
0 голосов
/ 23 февраля 2020

Поскольку я работаю над заданием по науке о данных и хочу улучшить визуализацию данных, я сталкиваюсь с взаимодействием python. Ранее я использовал интерактив, но здесь я застрял в следующем коде.

import matplotlib.pyplot as plt
import numpy as np

def my_plot_2(t):
    j_theta_1T=[5.3148,4.0691,2.9895,2.076099,1.3287,0.74739,0.3321,0.08304,0,0.08304,0.3321,0.7473,1.3287,2.076099,2.9895,4.0691,5.3148]
    X_T=np.linspace(0,2,17)
    plt.figure(num=0, figsize=(6, 4), dpi=80, facecolor='w', edgecolor='k')
    plt.plot(X_T,j_theta_1T,'b',t,j_theta_1T[0],'ro')
    plt.title('hypothesis_fixed_theta_function_of_X',fontsize=12)
    plt.xlabel('theta_1',fontsize=12)
    plt.ylabel('J_theta_1',fontsize=12)
    plt.grid(which='both')
    plt.show()

my_plot_2(0)

Это результат кода

enter image description here

Здесь вместо my_plot_2(0) я хочу использовать interact(my_plot_2, t=(0,2,0.125)) для передачи нескольких значений для t, а затем использовать одно за другим значение из j_theta_1T и использовать каждое значение прохода t для построения красной точки наведите курсор на кривую, используя кнопку, созданную interact из ipywidgets.

как мне взять одно за другим значение из j_theta_1T?

1 Ответ

1 голос
/ 24 февраля 2020

Это немного сложно, так как вам нужно ввести значение с плавающей запятой, но также использовать в качестве индекса в списке, чтобы получить правильное значение y.


import matplotlib.pyplot as plt
import numpy as np
import ipywidgets as ipyw

j_theta_1T=[5.3148,4.0691,2.9895,2.076099,1.3287,0.74739,0.3321,0.08304,0,0.08304,0.3321,0.7473,1.3287,2.076099,2.9895,4.0691,5.3148]
X_T=np.linspace(0,2,17)

def my_plot_2(t):

    plt.figure(num=0, figsize=(6, 4), dpi=80, facecolor='w', edgecolor='k')
    plt.plot(X_T,j_theta_1T,'b',
             t/8,j_theta_1T[t],'ro')
    plt.title('hypothesis_fixed_theta_function_of_X',fontsize=12)
    plt.xlabel('theta_1',fontsize=12)
    plt.ylabel('J_theta_1',fontsize=12)
    plt.grid(which='both')
    plt.show()


ipyw.interact(
    my_plot_2,
    t=ipyw.IntSlider(min=0, 
                     max=(len(j_theta_1T)-1), 
                     step=1, 
                     value=0)
)
...