使用下拉按钮更新customdata
我有一个快速的问题:基本上,我创建了一个带有一些悬停信息的图,并且有一个下拉按钮,用户可以在其中选择该图将基于的数据框架(是否过滤)。 因此,我像这样启动我的数字:
first_df = pd.DataFrame({'gene':['gene'+str(i) for i in range(10)],
'x':range(10),'y':range(10),'z':range(10),
'columnA':['info A '+str(i) for i in range(10)],
'columnB':['info B '+str(i) for i in range(10)]})
second_df = pd.DataFrame({'gene':['gene'+str(i) for i in range(10,20)],
'x':range(10,20),'y':range(10,20),'z':range(10,20),
'columnA':['info A '+str(i) for i in range(10,20)],
'columnB':['info B '+str(i) for i in range(10,20)]})
first_df_filtered = first_df.iloc[[0,2,4,6,8]]
second_df_filtered = second_df.iloc[[0,2,4,6,8]]
fig = go.Figure()
fig.add_scatter3d(x = first_df['x'],
y = first_df['y'],
z = first_df['z'],
customdata = first_df[['columnA', 'columnB']],
hovertemplate = "<br>".join(["<b>%{text}</b><br>",
"<i>info on y</i> = %{y:.2f}",
"<i>info on x</i> = %{x:.2f}",
"<i>info customdata 0</i> = %{customdata[0]}",
"<i>info customdata 1</i> = %{customdata[1]}"
]),
text = first_df['gene'],
mode='markers'
)
fig.add_scatter3d(x = second_df['x'],
y = second_df['y'],
z = second_df['z'],
customdata = second_df[['columnA', 'columnB']],
hovertemplate = "<br>".join(["<b>%{text}</b><br>",
"<i>info on y</i> = %{y:.2f}",
"<i>info on x</i> = %{x:.2f}",
"<i>info customdata 0</i> = %{customdata[0]}",
"<i>info customdata 1</i> = %{customdata[1]}"
]),
text = second_df['gene'],
mode='markers'
)
fig.update_layout(updatemenus=[
#------------------------------------------------------------------
dict(
active=0,
y=0.5,
buttons = list(
[dict(label = 'No filter',
method = 'update',
args = [{'x': [first_df['x'], second_df['x']],
'y': [first_df['y'], second_df['y']],
'z': [first_df['z'], second_df['z']],
'text': [first_df['gene'], second_df['gene']],
'customdata[0]':[first_df['columnA'], second_df['columnA']],
'customdata[1]':[first_df['columnB'], second_df['columnB']],
},
]),
dict(label = 'Filter on',
method = 'update',
args = [{'x': [first_df_filtered['x'], second_df_filtered['x']],
'y': [first_df_filtered['y'], second_df_filtered['y']],
'z': [first_df_filtered['z'], second_df_filtered['z']],
'text': [first_df_filtered['gene'], second_df_filtered['gene']],
'customdata[0]':[first_df_filtered['columnA'], second_df_filtered['columnA']],
'customdata[1]':[first_df_filtered['columnB'], second_df_filtered['columnB']],
},
]),
])
),
])
当我单击按钮“ no filter”时,每个点的悬挂式框上显示的所有信息都是正确的,但是当我单击按钮“过滤器”时,请访问“ extract”。 CustomData不正确。但是,如果我再次单击“无过滤器”按钮,信息再次正确。态
I have a quick question: basically I have created a plot with some hover information and I have a dropdown button, where the user can chose from which dataframe (filtered or not) the plot is going to be based on.
So i initiate my figure like so:
first_df = pd.DataFrame({'gene':['gene'+str(i) for i in range(10)],
'x':range(10),'y':range(10),'z':range(10),
'columnA':['info A '+str(i) for i in range(10)],
'columnB':['info B '+str(i) for i in range(10)]})
second_df = pd.DataFrame({'gene':['gene'+str(i) for i in range(10,20)],
'x':range(10,20),'y':range(10,20),'z':range(10,20),
'columnA':['info A '+str(i) for i in range(10,20)],
'columnB':['info B '+str(i) for i in range(10,20)]})
first_df_filtered = first_df.iloc[[0,2,4,6,8]]
second_df_filtered = second_df.iloc[[0,2,4,6,8]]
fig = go.Figure()
fig.add_scatter3d(x = first_df['x'],
y = first_df['y'],
z = first_df['z'],
customdata = first_df[['columnA', 'columnB']],
hovertemplate = "<br>".join(["<b>%{text}</b><br>",
"<i>info on y</i> = %{y:.2f}",
"<i>info on x</i> = %{x:.2f}",
"<i>info customdata 0</i> = %{customdata[0]}",
"<i>info customdata 1</i> = %{customdata[1]}"
]),
text = first_df['gene'],
mode='markers'
)
fig.add_scatter3d(x = second_df['x'],
y = second_df['y'],
z = second_df['z'],
customdata = second_df[['columnA', 'columnB']],
hovertemplate = "<br>".join(["<b>%{text}</b><br>",
"<i>info on y</i> = %{y:.2f}",
"<i>info on x</i> = %{x:.2f}",
"<i>info customdata 0</i> = %{customdata[0]}",
"<i>info customdata 1</i> = %{customdata[1]}"
]),
text = second_df['gene'],
mode='markers'
)
fig.update_layout(updatemenus=[
#------------------------------------------------------------------
dict(
active=0,
y=0.5,
buttons = list(
[dict(label = 'No filter',
method = 'update',
args = [{'x': [first_df['x'], second_df['x']],
'y': [first_df['y'], second_df['y']],
'z': [first_df['z'], second_df['z']],
'text': [first_df['gene'], second_df['gene']],
'customdata[0]':[first_df['columnA'], second_df['columnA']],
'customdata[1]':[first_df['columnB'], second_df['columnB']],
},
]),
dict(label = 'Filter on',
method = 'update',
args = [{'x': [first_df_filtered['x'], second_df_filtered['x']],
'y': [first_df_filtered['y'], second_df_filtered['y']],
'z': [first_df_filtered['z'], second_df_filtered['z']],
'text': [first_df_filtered['gene'], second_df_filtered['gene']],
'customdata[0]':[first_df_filtered['columnA'], second_df_filtered['columnA']],
'customdata[1]':[first_df_filtered['columnB'], second_df_filtered['columnB']],
},
]),
])
),
])
When I click on the button 'No filter', all the information shown on the hoverbox for each point is correct, but when I click on the button 'Filter on' the information shown in the hoverbox for the customdata is not correct. However if I click again on the 'No filter' button the information is correct again. Here is a picture showing an example of my problem
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论