无法弄清楚为什么图形不更新

时间:2019-10-15 18:48:02

标签: python plotly plotly-dash

我正在建立一个散乱的网站,我想在其中显示来自不同时间点的某些域的数据。因此,我有一个滑块,您可以使用它确定要从哪个时间点看哪些数据。那已经起作用了。此外,我希望如果有人单击某个点,那么它会显示每个时间点上该域的所有位置之间的一条线。

我试图定义一个更新函数,以便使用其中的行更新跟踪的数据。但是,图形本身在更新后看起来并没有什么不同。

# create underlying figure
fig = go.Figure()
for date in file.date.unique():
    f = file.loc[file["date"] == date]

    fig.add_trace(go.Scatter(x = f.x,
                         y = f.y,
                         mode="markers",
                         name = date,
                         hovertext = f.domains,
                         visible = False,
                         marker=dict(
                             color=['#a3a7e4'] * len(f.x),
                             size=[5] * len(f.x)
                         ),
                        ))

# trace of path
dom="xxx"
filt = file.loc[file["domains"] == dom]
x_ = filt.x
y_ = filt.y

fig.add_trace(go.Scatter( 
    x = x_,
    y = y_,
    hovertext= dom,
    name='"'+ dom +'"' + " development path",
    visible=True,
    mode='lines'
    ))

# Create and add slider
steps = []
for i in range(len(fig.data)-1):
    step = dict(
        method="restyle",
        args=["visible", [False] * len(fig.data)],
        label=fig.data[i].name
    )
    step["args"][1][i] = True  # Toggle i'th trace to "visible"
    steps.append(step)

sliders = [dict(
    active=10,
    currentvalue={"prefix": "Date: "},
    pad={"t": 50},
    steps=steps
)]
# create widget from figure
f = go.FigureWidget(data=fig.data, layout=fig.layout)

# create our callback function
def update_point(trace, points, selector):

filter_2 = file[(file["x"] == points.xs[0]) & (file["y"] == 
    points.ys[0])]
domain = filter_2.domains.values[0]
print(domain)
small_df = file[file["domains"] == domain]
fig.data[-1].hovertext = domain
fig.data[-1].name = '"' + domain + '"' + " development path"
fig.data[-1].x = small_df.x.values
fig.data[-1].y = small_df.y.values
fig.update_traces(visible=True, selector=dict(mode="line"))
f = go.FigureWidget(data=fig.data, layout=fig.layout)
f


for i in range(len(fig.data)-1):
    if f.data[i].visible is True:
        f.data[i].on_click(update_point)

f

我只希望图形也更新,而不仅仅是基础数据。

1 个答案:

答案 0 :(得分:0)

在这里查看Dash回调:

https://dash.plot.ly/getting-started-part-2

简而言之,您需要在回调中添加装饰器,以表明哪个输入触发了回调,以及哪个图形需要在回调运行时进行更新。您不能以编程方式触发回调并期望它更改图形。据我所知,回调需要来自UI。

例如:

GROUP BY

此示例期望当id为“ my-id”的输入的值发生更改时触发回调,并且作为回报,它会更改div的值。如果需要回调来更改图形,则装饰器中的“输出”必须是您的图形。