График не меняется при выборе из раскрывающегося списка - PullRequest
1 голос
/ 08 мая 2020

Я пытаюсь построить интерактивный сюжет для приборной панели. Данные находятся в pandas кадре данных state_df.

ty=['Confirmed','Bedridden','Recovered']

def type_tt(need_type):
    need=[]
    need.append(need_type)
    my_df=state_df[state_df.Status.isin(need)]
    my_df=my_df.set_index('Date')
    return my_df


def heat_map(types):
    num=10# 10 day
    my_df=type_tt(types)
    sns.heatmap((my_df.drop('Status',axis=1)).tail(num)[top_14],cmap='Blues', linewidths=0.1)
    #df.style.background_gradient(cmap='Blues')

#heat_map(types_op)
app7=pn.interact(heat_map,types=ty)
app7

Это дает раскрывающееся меню с параметрами enter image description here

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

Есть лиды?

1 Ответ

1 голос
/ 12 мая 2020

Самое важное, что здесь нужно добавить, это то, что ваша функция heat_map() должна return вашего графика. Я думаю, что это то, чего не хватает.

Трудно воссоздать ваш пример, так как нет данных образца, но вот пример, который работает. Я использовал hvplot вместо seaborn для создания интерактивной тепловой карты.

Пример кода:

# import libraries
import numpy as np
import pandas as pd
import hvplot.pandas
import panel as pn
pn.extension()

# create sample data
df = pd.DataFrame({
    'date': pd.date_range(start='01-01-2020', end='31-12-2020'),
    'status': np.random.choice(['confirmed', 'bedridden', 'recovered'], 366),
    'status2': np.random.choice(['A', 'B', 'C'], 366),
    'value': np.random.rand(366) * 100
})

types = ['confirmed', 'bedridden', 'recovered']

# you need to return your plot to get the interaction
def plot_heatmap(chosen_type):
    df_selected = df[df['status']==chosen_type]
    # hvplot is handy for creating interactive plots
    heatmap = df_selected.hvplot.heatmap(x='date', y='status2', C='value')
    return heatmap

# show your interactive plot with dropdown   
pn.interact(plot_heatmap, chosen_type=types)

В качестве примечания, с hvplot вам не понадобится весь этот дополнительный код, чтобы получить приличную интерактивную тепловую карту с раскрывающимся списком. Вы можете просто сделать:

df.hvplot.heatmap(x='status2', y='date', C='value', groupby='status')

Дополнительная информация о pn.interact ():
https://panel.holoviz.org/getting_started/index.html

Итоговый интерактивный график с раскрывающимся списком: interactive heatmap with dropdown

...