1

以下代码本身可以工作,但是当它在我的绘图图中时,我有一个“TypeError:unhashable type:'set'”。你能帮我解决这个问题吗?我从未使用过 set 或 freezeset。

非常感谢 !

有效的代码本身:

updatemenus = []
for n, ecole in enumerate(liste_ecole):
  visible = [False]*len(liste_ecole)
  visible[n] = True
  temp_dict = dict(label = str(liste_ecole),
                     method = 'update',
                     args = [{"visible" : visible,
                             {"title"} : "Prévisions des effectifs pour {}".format(liste_ecole)}])
updatemenus.append(temp_dict)

我的绘图图中的代码:

fig = go.Figure([
    go.Scatter(
        name='Effectif réel',
        x=df2['date_str'],
        y=df2['reel'],
        mode='markers+lines',
        marker=dict(color="#1e3d59"),
        line=dict(width=1),
        showlegend=True,
        text=df2['jour']
    ),
    go.Scatter(
        name='Prévision algorithme',
        x=df2['date_str'],
        y=df2['output'],
        mode='markers+lines',
        marker=dict(color="#ff6e40", size=4),
        line=dict(width=2),
        showlegend=True,
        text=df2['jour']
    )
])
fig.layout.plot_bgcolor = '#f5f0e1'


updatemenus = []
for n, ecole in enumerate(liste_ecole):
  visible = [False]*len(liste_ecole)
  visible[n] = True
  temp_dict = dict(label = str(liste_ecole),
                     method = 'update',
                     args = [{"visible" : visible,
                             {"title"} : "Prévisions des effectifs pour {}".format(liste_ecole)}]) **#THIS IS WHERE I GOT MY ERROR**
updatemenus.append(temp_dict)


fig.update_layout(
    updatemenus=list([dict(buttons= list_updatemenus)]),
    yaxis_title="Nombre de convives",
    hovermode="x",

    direction="down",
    pad={"r": 10, "t": 10},
    showactive=True,
    x=1.02,
    xanchor="left",
    y=0.75,
    yanchor="top"
    )
                 
fig.update_xaxes(tickformat='%d-%b-%Y')    
fig.update_xaxes(rangeslider_visible=True)

fig.show()
4

1 回答 1

1

此错误与 Plotly 无关。您不能将set(literal) 作为 a 中的键,dict因为 aset不可散列。

In [1]: {
   ...:     "visible" : ...,
   ...:     {"title"} : "Prévisions des effectifs pour {}".format(...)
   ...: }
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-1-24fea1201dd1> in <module>
      1 {
      2     "visible" : ...,
----> 3     {"title"} : "Prévisions des effectifs pour {}".format(...)
      4 }

TypeError: unhashable type: 'set'

In [2]: type({"title"})
Out[2]: set

而且你不需要在那里设置,所以只需替换{"title"}"title"(a hashable str)。

于 2021-07-23T15:58:49.750 回答