Python 如何在Dash应用程序内的Plotly graph对象中单击时更新标记的颜色?

Python 如何在Dash应用程序内的Plotly graph对象中单击时更新标记的颜色?,python,plotly,plotly-dash,Python,Plotly,Plotly Dash,我有一个代码,它创建了一个绘制成网格的图形,这样网格上的每个(x,y)正方形都用标记填充。我希望在单击标记时更改标记的颜色。我试着在这里使用代码:作为一个例子,但当我运行Dash应用程序时,图形不可单击(Plotly中的标准交互式工具除外)。 我的图表的代码是这样的 def create_interactive_grid(n): x = [] y = [] for i in range(n): for j in range(n):

我有一个代码,它创建了一个绘制成网格的图形,这样网格上的每个(x,y)正方形都用标记填充。我希望在单击标记时更改标记的颜色。我试着在这里使用代码:作为一个例子,但当我运行Dash应用程序时,图形不可单击(Plotly中的标准交互式工具除外)。 我的图表的代码是这样的

def create_interactive_grid(n):
    x = []
    y = []
    for i in range(n):
        for j in range(n):
            xvalue, yvalue = i, j
            x.append(xvalue + 0.5)
            y.append(yvalue + 0.5)

    fig = go.Figure()
    scatter = go.Scatter(x=x, y=y, marker=dict(size=30, symbol=1, color="blue"), line=dict(width=0),
                         mode='markers')
    fig.add_trace(scatter)

    fig.update_layout(hovermode="closest", clickmode="event", plot_bgcolor="white", width=1000, height=1000,
                      showlegend=False)
    fig.update_yaxes(showgrid=True, gridwidth=1, gridcolor="black", tickvals=[x for x in range(n)],
                     range=[0, n], scaleanchor="x", constrain="domain", showticklabels = False, ticks = "")
    fig.update_xaxes(showgrid=True, gridwidth=1, gridcolor="black", tickvals=[x for x in range(n)],
                     range=[0, n], constrain="domain", scaleanchor="y", showticklabels = False, ticks= "")

    def update_cell(trace, points, selector):
        # take in click
        # change color of marker on visible graph
        c = list(scatter.marker.color)
        for point in points.point_inds:
            c[point] = "black"
            with fig.batch_update():
                scatter.marker.color = c

    scatter.on_click(update_cell)
    return fig

其他一些教程指出,我需要为此使用回调函数,但我不确定如何在多页应用程序中实现该函数,因为该函数与我的应用程序/运行脚本或页面不在同一文件中。

这是js代码,您可以在python中传输它:

updatePlotColor() {
    let update = {'marker.color': this.color};
    PlotlyModule.plotlyjs.restyle("plotDiv", update, 1);
}

其中“1”是记录道数(如果只有一条记录道,则将1更改为0)。

或者,由于这比面向数据更直观,因此在同一点上创建新颜色的新标记(以覆盖旧标记)也是可以接受的。