我是plotly和ipywidgets的新手
我想创建一个fig
,它有两个控制器板,称为control1
和control2
。其中,control1
是一组允许我修改数据的小部件。然后在control2
中,我想访问control1
中的数据,以便进一步分析和显示。
对此的简单解决方案是将control1
和control2
组合为单个control
板。但是,我有很多滤镜,这使得它看起来不太好,所以我想把它们分开。
我用一个简单的数据来说明:
comp year val1 val2
0 a 2000 89 19
1 a 2001 47 91
2 a 2002 50 25
3 a 2003 63 5
4 a 2004 40 28
5 a 2005 79 53
6 b 2000 26 57
7 b 2001 19 75
8 b 2002 72 89
9 b 2003 74 7
10 b 2004 49 11
11 c 2000 35 62
12 c 2001 50 23
13 c 2002 32 40
14 c 2003 83 60
15 d 2000 91 71
16 d 2001 61 64
17 d 2002 29 80
18 d 2003 100 48
19 d 2004 38 41
20 d 2005 75 38
创建图形:
import ipywidgets as widgets
import pandas as pd
import plotly.graph_objects as go
# Import data
df = pd.read_csv('test_interactive.csv')
# Creating figure
data = go.Scattergl(x=df['val1'],
y=df['val2'],
mode='markers')
layout = go.Layout(title='Some Title')
fig = go.FigureWidget(data=data, layout=layout)
# Create `control1` board:
def graph_filter(comp, year):
# filter by 'comp' and 'year':
tem = df[(df['comp'] == comp) & (df['year'] == year)]
fig.data[0].x = tem['val1']
fig.data[0].y = tem['val2']
control1 = widgets.interactive(
graph_filter,
comp=widgets.Dropdown(
options=df['comp'].unique(),
value='a',
disabeled=False,
description='Select Comp'),
year=widgets.Dropdown(
options=df['year'].unique(),
value=2000,
description='Select Year',
disabeled=False)
)
现在我想创建另一个control2
,我可以在control1
之后访问数据过滤器进行进一步分析,但我不知道如何。
control2 = ???
谢谢
我认为解决方案是简单地在自定义函数中设置变量修改数据框架为全局变量。那是我现在能想到的一个快速的解决办法。
def graph_filter(comp, year):
# filter by 'comp' and 'year':
global tem
tem = df[(df['comp'] == comp) & (df['year'] == year)]