【问题标题】:Plotly express animation: changes in hoverlabel only applied for the first framePlotly express 动画:hoverlabel 的变化仅适用于第一帧
【发布时间】:2021-06-13 12:59:41
【问题描述】:
import pandas as pd
from pandas import Timestamp
import plotly.express as px

df = pd.DataFrame({'continent': {127: 'South America',
  128: 'South America',
  129: 'South America',
  130: 'South America',
  131: 'South America'},
 'date': {127: Timestamp('2021-03-01 00:00:00'),
  128: Timestamp('2021-03-26 00:00:00'),
  129: Timestamp('2021-04-20 00:00:00'),
  130: Timestamp('2021-05-15 00:00:00'),
  131: Timestamp('2021-06-09 00:00:00')},
 'total_cases': {127: 20465329.0,
  128: 23470911.0,
  129: 26544779.0,
  130: 29891133.0,
  131: 30534015.0}})

fig = px.bar(df, x='continent', y='total_cases', animation_frame=df.date.astype(str),
#              hover_data={'animation_frame':False,
#                         'continent':False,
#                         }
            )

fig.update_traces(hovertemplate='Date:%{animation_frame}<br>Total Cases:%{y}')

运行上面的代码会输出一个带有动画滑块的条形图。对悬停标签所做的更改只有在您不移动滑块时才可见。一旦你这样做并且框架发生变化,默认的plotly.express hoverlabel 会重新出现(我认为是因为跟踪更新)。有什么解决办法吗?

编辑:添加 GIF 以显示问题

【问题讨论】:

    标签: python plotly data-visualization plotly-python


    【解决方案1】:

    这是known issue,在撰写本文时,唯一的解决方案似乎是将以下内容添加到您的设置中:

    for f in fig.frames:
        f.data[0].update(hovertemplate='Date:%{animation_frame}<br>Total Cases:%{y}')
    

    您还需要保留:

    fig.update_traces(hovertemplate='Date:%{animation_frame}<br>Total Cases:%{y}')
    

    如果您不这样做,那么在您通过按play 或来回移动滑块运行任何动画之前 的第一帧仍会显示:

    完整代码:

    import pandas as pd
    from pandas import Timestamp
    import plotly.express as px
    
    df = pd.DataFrame({'continent': {127: 'South America',
      128: 'South America',
      129: 'South America',
      130: 'South America',
      131: 'South America'},
     'date': {127: Timestamp('2021-03-01 00:00:00'),
      128: Timestamp('2021-03-26 00:00:00'),
      129: Timestamp('2021-04-20 00:00:00'),
      130: Timestamp('2021-05-15 00:00:00'),
      131: Timestamp('2021-06-09 00:00:00')},
     'total_cases': {127: 20465329.0,
      128: 23470911.0,
      129: 26544779.0,
      130: 29891133.0,
      131: 30534015.0}})
    
    fig = px.bar(df, x='continent', y='total_cases', animation_frame=df.date.astype(str),
    #              hover_data={'animation_frame':False,
    #                         'continent':False,
    #                         }
                )
    
    fig.update_traces(hovertemplate='Date:%{animation_frame}<br>Total Cases:%{y}')
    for f in fig.frames:
        f.data[0].update(hovertemplate='Date:%{animation_frame}<br>Total Cases:%{y}')
    
    fig.show()
    

    【讨论】:

    • 完美运行!很高兴为每一帧提供微调控件。
    • @callmeanythingyouwant 很高兴听到它!乐于助人!
    猜你喜欢
    • 2021-12-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-27
    • 2013-07-07
    • 2015-01-12
    • 1970-01-01
    • 2021-07-26
    相关资源
    最近更新 更多