Загрузка диаграммы с виджетом даты внутри класса Python

Я попытался создать класс Python, который должен загружать диаграмму и взаимодействовать с виджетом даты. К сожалению, я мог загрузить только диаграмму или диаграмму и виджет без взаимодействия.

Идея состоит в том, чтобы настроить красную рамку / прямоугольник на диаграмме в соответствии с выбранным диапазоном дат (в виджете).

Последний код, над которым я работал, следующий:

class ChartsPropylene():
    def __init__(self):
        self.start_date = datetime(2008, 4, 24)
        self.end_date = datetime(2020, 5, 24)
        self.dates = pd.date_range(start_date, end_date, freq='D')
        self.options = [(date.strftime(' %d %b %y '), date) for date in dates]
        self.index = (0, len(options)-1)
        selection_range_slider = widgets.SelectionRangeSlider(
                                    options=self.options,
                                    index=self.index,
                                    description='Dates',
                                    orientation='horizontal',
                                    layout={'width': '600px'}
                                )
        display(selection_range_slider)
        
    def __printChart__(self,selection_range_slider):
        x = selection_range_slider.get_interact_value()[0].toordinal()
        y = selection_range_slider.get_interact_value()[1].toordinal()
        abs1 = abs(y-x)
        plt.figure(figsize=(18,10))
        sns.set(style="darkgrid")
        palette2 = sns.color_palette("mako_r", 3)
        sns.lineplot(x="Date", y="Value",  hue='Std_Type', style='Value_Type', sizes=(.25, 2.5), ci='sd', estimator=None, lw=1, palette = palette2, data=tbl4)
        rectangle1 = plt.Rectangle(xy=(x, 500), width=abs1, height=500, linewidth=2, 
                               color='red', facecolor='blue',
                               joinstyle='round', alpha=0.1, fill=True)
        rectangle2 = plt.Rectangle(xy=(x, 500), width=abs1, height=500, linewidth=2, 
                               color='red', facecolor='blue',
                               joinstyle='round', alpha=1, fill=False)
        plt.gca().add_patch(rectangle1)
        plt.gca().add_patch(rectangle2)
        plt.show()
    
    def __loadChart__(self):
        widgets.interact(
        self.__printChart__(selection_range_slider),
        selection_range_slider = selection_range_slider
    )

ChartsPropylene().__loadChart__()

Обзор данных следующий:

>tbl4.info()

<class 'pandas.core.frame.DataFrame'>
RangeIndex: 2214 entries, 0 to 2213

Data columns (total 4 columns):
Date          2214 non-null datetime64[ns]
Value_Type    2214 non-null object
Std_Type      2214 non-null object
Value         2214 non-null float64
dtypes: datetime64[ns](1), float64(1), object(2)


> tbl4.head(20)

       Date    Value_Type Std_Type Value
0   2006-01-06  mid_value   Mid 837.76
1   2006-01-13  mid_value   Mid 821.22
2   2006-01-20  mid_value   Mid 903.89
3   2006-01-27  mid_value   Mid 914.92
4   2006-02-03  mid_value   Mid 942.48
5   2006-02-10  mid_value   Mid 981.06
6   2006-02-17  mid_value   Mid 970.03
7   2006-02-24  mid_value   Mid 975.54
8   2006-03-03  mid_value   Mid 975.54
9   2006-03-10  mid_value   Mid 975.54
10  2006-03-17  mid_value   Mid 975.54
11  2006-03-24  mid_value   Mid 975.54
12  2006-03-31  mid_value   Mid 975.54
13  2006-04-07  mid_value   Mid 928.70
14  2006-04-14  mid_value   Mid 928.70
15  2006-04-21  mid_value   Mid 928.70
16  2006-04-28  mid_value   Mid 961.77
17  2006-05-05  mid_value   Mid 1036.17
18  2006-05-12  mid_value   Mid 1069.24
19  2006-05-19  mid_value   Mid 1069.24

Результат, который я получил, следующий (виджет появляется, но не взаимодействует с диаграммой - красный квадрат / прямоугольник):

Вы можете помочь мне это исправить?

0 ответов

Другие вопросы по тегам