Plotly Express `scatter_mapbox` 与 `animation_frame` 和 `color`

Poltly Express `scatter_mapbox` with `animation_frame` and `color`

如果数据的列为:'e_lat'、'e_lon'、'Année' 和 'Expéditeur'。 我正在尝试制作 scatter_mapbox,帧由“Année”制作动画,颜色基于 'Expéditeur'(明确的,人名)。

# I created a row df['_color'] = df['Expéditeur'] because in the end I want to change the way _color is defined.

fig = px.scatter_mapbox(df,
                        lat='e_lat',
                        lon='e_lon',
                        hover_name='Ville Expéditeur',
                        hover_data=['Expéditeur', 'Destinataire', 'Ville Expéditeur', 'Année'],
                        animation_frame='Année',
                        mapbox_style='carto-positron',
                        zoom=4,
                        color='_color',
                        )
fig.show()

问题是我得到了这样的东西: (仅显示具有第一种颜色的点)

如果我注释掉 color='_color',,我会得到: 如果我注释掉 animation_frame='Année'',,我会得到:

我做了很多研究,但在我看来,人们总是做同样的事情并得到不同的结果([例如本教程](https://towardsdatascience.com/how-to-animate-scatterplots-on-mapbox-using-plotly-express-3bb49fe6a5d, this Whosebug issue,...)

我的 plotly 库是最新的。

我用`动画组、color_discrete_map、color_discrete_sequence等尝试了很多不同的东西,但都没有成功。

我在这里做错了什么?非常感谢。


[编辑] 事实上,它与 here 完全相同(未解决)。 这似乎是因为一个documented bug of Plotly。 “如果所有颜色都用于第一帧,问题就会消失。”

我通过添加“假数据”(在地图范围之外)解决了这个问题:在动画的第一帧中,每种颜色一个。

new_rows = []
for color in df['_color'].unique():
    new_row = {'_color': color, 'Année': df['Année'].min(), 'lat': 0, 'lon': 0}
    new_rows.append(new_row)
df = df.append(new_rows, ignore_index=True)

希望这会对某人有所帮助。

事实上,它与 here 完全相同(未解决)。 这似乎是因为一个documented bug of Plotly。 “如果所有颜色都用于第一帧,问题就会消失。”

我通过添加“假数据”(在地图范围之外)解决了这个问题:在动画的第一帧中,每种颜色一个。

new_rows = []
for color in df['_color'].unique():
    new_row = {'_color': color, 'Année': df['Année'].min(), 'lat': 0, 'lon': 0}
    new_rows.append(new_row)
df = df.append(new_rows, ignore_index=True)

希望这会对某人有所帮助。