为了账号安全,请及时绑定邮箱和手机立即绑定

Plotly:使用 plotly express 行时如何在 hoverinfo 中格式化日期?

Plotly:使用 plotly express 行时如何在 hoverinfo 中格式化日期?

慕田峪4524236 2022-10-25 15:33:46
我正在使用以下代码使用 plotly express 线显示时间序列数据。fig = px.line(df, x="date", y="close", color="type" ,category_orders = co ,color_discrete_sequence = colors,              line_group="type", title = company)fig.update_layout(height=500, width=1500)#hovermode="x unified"fig.show()但是在悬停时的绘图中,它以以下格式显示日期:“月,年”,即它不显示日期。但我希望日期以以下格式显示:“月日,年”。
查看完整描述

1 回答

?
慕哥6287543

TA贡献1831条经验 获得超10个赞

text您可以通过和的正确组合来做到这一点hovertemplate:


for ser in fig['data']:

    ser['text']=list(set([d.strftime('%Y-%m-%d') for d in df['dates']]))

    ser['hovertemplate']='category=open<br>dates=%{text}<br>price=%{y}<extra></extra>'

fig.show()

ser['text'] 之所以如此混乱,是因为结果图在 x 轴上显示了唯一的日期。而且,由于plotly.express适用于 tidy 或long 而不是 wide data,因此数据集中包含您的日期的列很可能没有唯一的日期值。


这是一个基于一些具有不同类别的金融时间序列数据的示例,这是一个完美的案例px.line:

//img1.sycdn.imooc.com//6357917800018da910710555.jpg

带有示例数据的完整代码:


# imports

import pandas as pd

import plotly.graph_objects as go

from datetime import datetime

import plotly.express as px


# data

open_data = [33.0, 33.3, 33.5, 33.0, 34.1]

high_data = [33.1, 33.3, 33.6, 33.2, 34.8]

low_data = [32.7, 32.7, 32.8, 32.6, 32.8]

close_data = [33.0, 32.9, 33.3, 33.1, 33.1]

dates = [datetime(year=2020, month=10, day=10),

         datetime(year=2020, month=10, day=11),

         datetime(year=2020, month=10, day=12),

         datetime(year=2020, month=10, day=13),

         datetime(year=2020, month=10, day=14)]


# data organized in a pandas dataframe

df=pd.DataFrame(dict(open=open_data,

                    high=high_data,

                    low=low_data,

                    close=close_data,

                    dates=dates))


# transform the data from wide to long

df = pd.melt(df, id_vars=['dates'], value_vars=df.columns[:-1],

         var_name='category', value_name = 'price')


# setup for a perfect plotly time series figure

fig = px.line(df, x="dates", y="price", title='Prices', color = 'category')


# edit text and hovertemplate

for ser in fig['data']:

    ser['text']=list(set([d.strftime('%Y-%m-%d') for d in df['dates']]))

    ser['hovertemplate']='category=open<br>dates=%{text}<br>price=%{y}<extra></extra>'


fig.show()


查看完整回答
反对 回复 2022-10-25
  • 1 回答
  • 0 关注
  • 202 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号