python - plotly 表达动画: changes in hoverlabel only applied for the first frame

标签 python plotly data-visualization plotly-python

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}')

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

编辑:添加 GIF 来显示问题

enter image description here

最佳答案

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

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

enter image description here

您还需要保留:

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

如果您不这样做,那么在您通过按播放或来回移动 slider 来运行任何动画之前的第一帧仍将显示以下内容:

enter image description here

完整代码:

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()

关于python - plotly 表达动画: changes in hoverlabel only applied for the first frame,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67958555/

相关文章:

python - 破折号在子图之间动态注释线图

python - 将列表的 str 对象转换为一个列表对象

python-3.x - 如何在 plotly.express 中添加痕迹

javascript - Highcharts 在某些缩放级别不显示数据

javascript - Protovis 的跨浏览器数据可视化替代方案?

python - Matplotlib 具有相同类变量的多个动画

python - OS X python : can I explicitly set MACOSX_DEPLOYMENT_TARGET for extensions?

python - Plotly python:完全免费?

python - 使用 Python 离线更新图表

plotly - 如何在绘图中不填充 NaN 下的区域