有关下拉菜单的 Plotly 文档包含以下示例:
import plotly.graph_objects as go
import pandas as pd
# Load dataset
df = pd.read_csv(
"https://raw.githubusercontent.com/plotly/datasets/master/finance-charts-apple.csv")
df.columns = [col.replace("AAPL.", "") for col in df.columns]
# Initialize figure
fig = go.Figure()
# Add Traces
fig.add_trace(
go.Scatter(x=list(df.Date),
y=list(df.High),
name="High",
line=dict(color="#33CFA5")))
fig.add_trace(
go.Scatter(x=list(df.Date),
y=[df.High.mean()] * len(df.index),
name="High Average",
visible=False,
line=dict(color="#33CFA5", dash="dash")))
fig.add_trace(
go.Scatter(x=list(df.Date),
y=list(df.Low),
name="Low",
line=dict(color="#F06A6A")))
fig.add_trace(
go.Scatter(x=list(df.Date),
y=[df.Low.mean()] * len(df.index),
name="Low Average",
visible=False,
line=dict(color="#F06A6A", dash="dash")))
# Add Annotations and Buttons
high_annotations = [dict(x="2016-03-01",
y=df.High.mean(),
xref="x", yref="y",
text="High Average:<br> %.3f" % df.High.mean(),
ax=0, ay=-40),
dict(x=df.Date[df.High.idxmax()],
y=df.High.max(),
xref="x", yref="y",
text="High Max:<br> %.3f" % df.High.max(),
ax=-40, ay=-40)]
low_annotations = [dict(x="2015-05-01",
y=df.Low.mean(),
xref="x", yref="y",
text="Low Average:<br> %.3f" % df.Low.mean(),
ax=0, ay=40),
dict(x=df.Date[df.High.idxmin()],
y=df.Low.min(),
xref="x", yref="y",
text="Low Min:<br> %.3f" % df.Low.min(),
ax=0, ay=40)]
fig.update_layout(
updatemenus=[
dict(
active=0,
buttons=list([
dict(label="None",
method="update",
args=[{"visible": [True, False, True, False]},
{"title": "Yahoo",
"annotations": []}]),
dict(label="High",
method="update",
args=[{"visible": [True, True, False, False]},
{"title": "Yahoo High",
"annotations": high_annotations}]),
dict(label="Low",
method="update",
args=[{"visible": [False, False, True, True]},
{"title": "Yahoo Low",
"annotations": low_annotations}]),
dict(label="Both",
method="update",
args=[{"visible": [True, True, True, True]},
{"title": "Yahoo",
"annotations": high_annotations + low_annotations}]),
]),
)
])
# Set title
fig.update_layout(title_text="Yahoo")
fig.show()
我想要两个下拉菜单,一个用于“高可见”,另一个用于“低可见”,标题应为“雅虎,高:{是或否},低:{是或否}”,但互联网搜索和 ChatGPT 都无法建议如何根据其他下拉菜单的当前值更改帧/跟踪的可见性。
这是一个有点做作的例子;在我的实际用例中,我有三个滑块,分别具有 8、8 和 51 个选项,并且我不想创建具有 3264 个值的单个滑块。
问题是(使用更新菜单)不可能有一个下拉按钮起作用给定另一个下拉菜单的状态,即。按钮 args
是静态的,您需要它们是动态的。您需要一个函数回调来处理输入更改,并通过动态构建
{"visible": [...]}
参数使下拉菜单协同工作,然后使用此参数手动调用plotly.js“更新”方法。您可以通过在渲染的 html 中添加一些 javascript 来实现此目的,即通过
post_script
方法传递
show()
,@参见示例here 和 here)。 或者,您可以使用
Dash,它允许通过交互构建丰富的布局,它提供许多组件(包括 dropdowns),并运行服务器(即,这样您就可以让后端 callbacks 更新布局和 Plotly 图形) ,我的意思是不需要 JavaScript,尽管你仍然可以有客户端回调)。