【问题标题】:Plotly: How to format date in hoverinfo when using plotly express line?Plotly:使用 plotly express 行时如何在 hoverinfo 中格式化日期?
【发布时间】:2020-08-11 01:43:29
【问题描述】:

我正在使用以下代码使用 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()

但在悬停时的绘图中,它以以下格式显示日期:“月,年”,即它不显示日期。但我希望日期以以下格式显示:“月日,年”。

【问题讨论】:

    标签: python plotly data-visualization plotly-express


    【解决方案1】:

    您可以通过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 rather than wide data,因此数据集中包含您的日期的列很可能不具有唯一的日期值。

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

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

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

    【讨论】:

      猜你喜欢
      • 2021-10-21
      • 2018-07-14
      • 2019-12-14
      • 1970-01-01
      • 2019-11-04
      • 2021-08-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多