【问题标题】:Plotly: How to annotate maximum value when x axis displays dates?Plotly:当x轴显示日期时如何注释最大值?
【发布时间】:2021-07-16 16:24:09
【问题描述】:

所以我有一个数据框 (df_prod),其中包含一些 PV 面板每小时发电量的时间序列。我有一个图表,想注释峰值。

我知道如何找到该值,但我不知道如何将峰值发生的日期作为注释的 x 值。我想我需要给它一个字符串,但我不确定。

这不起作用:

for spal in df_prod.columns:
    maxvalue = df_prod[spal].max()
    fig.add_annotation(
    x = df_prod.index[df_prod[spal]==maxvalue],            # <--- this ist the problem
    y = wert,
    text='peak ' + spal + ': ' + str(f'{round(wert): n}') + ' kW',
    font={'size': 9} ,
    showarrow=True,
    arrowhead=3,
    xanchor='left',
    ax=20,
    ay=5,
    row=r, 
    col=c
)

【问题讨论】:

    标签: python annotations plotly


    【解决方案1】:

    当索引为DatetimeIndex 时,即使有多个时间序列,这也适用:

    fig.add_annotation(x=df.max(axis = 1).idxmax(),
                       y=df.max().max())
    

    剧情:

    完整代码:

    import plotly.express as px
    import numpy as np
    from datetime import datetime
    import pandas as pd
    np.random.seed(23)
    observations = 75
    df=pd.DataFrame(dict(A=np.random.uniform(low=-1, high=1.1, size=observations).tolist(),
                        B=np.random.uniform(low=-1, high=1.1, size=observations).tolist(),
                        C=np.random.uniform(low=-1, high=1.1, size=observations).tolist(),
                        ))
    df.iloc[0,] = 0
    df = df.cumsum()
    
    firstdate = datetime(2020,1,1)
    df['date'] = pd.date_range(firstdate, periods=df.shape[0]).tolist()
    df.set_index('date', inplace=True)
    
    # fig.add_annotation(x=df.max(axis = 1).idxmax(),
    #                    y=df.max().max())
    
    fig = px.line(df, x = df.index, y = df.columns)
    
    fig.add_annotation(showarrow=True,
                       arrowhead=1,
                       align = 'right',
                       x=df.max(axis = 1).idxmax(),
                       y=df.max().max(),
                       text="Max",
                       opacity=0.7)
    f = fig.full_figure_for_development(warn=False)
    fig.show()
    

    【讨论】:

    • 谢谢!我不知道 idxmax()。那解决了! :)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-05-11
    • 1970-01-01
    • 2020-09-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多