1

我正在尝试为仪表板构建交互式绘图。数据在 pandas dataframe 中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

这给出了一个带有选项的下拉菜单 在此处输入图像描述

但是当我从下拉菜单中更改选项时,情节不会改变。我尝试查看链接文档,但没有任何结果。

有什么线索吗?

4

1 回答 1

1

在这里添加的最重要的事情是您的功能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

生成的带有下拉菜单的交互式绘图: 带有下拉菜单的交互式热图

于 2020-05-12T16:58:44.097 回答