Python Plotly:如何在不同的轨迹上绘制带有时间值的标记?

Python Plotly:如何在不同的轨迹上绘制带有时间值的标记?,python,plotly,plotly-python,Python,Plotly,Plotly Python,我有两个数据帧: df1包含列:“时间”、“投标价格” df2包含列:“时间”、“标志” 我想把df1的一个时间序列画成一个折线图,我想在那个些时间点上df2“flag”column value=True的地方在那个轨迹上做标记 我如何才能做到这一点?您可以通过三个步骤完成: 使用go.figure()设置地物 使用fig.update(go.Scatter) 对你的旗帜也做同样的事情 下面的代码片段正是您在问题中描述的内容。我已经设置了两个数据帧df1和df2,然后将它们合并在一起,以便以后更

我有两个数据帧: df1包含列:“时间”、“投标价格” df2包含列:“时间”、“标志”

我想把df1的一个时间序列画成一个折线图,我想在那个些时间点上df2“flag”column value=True的地方在那个轨迹上做标记


我如何才能做到这一点?

您可以通过三个步骤完成:

  • 使用
    go.figure()
    设置地物
  • 使用
    fig.update(go.Scatter)
  • 对你的旗帜也做同样的事情
  • 下面的代码片段正是您在问题中描述的内容。我已经设置了两个数据帧
    df1
    df2
    ,然后将它们合并在一起,以便以后更容易参考。 我还显示了累加序列的标志,其中序列中的每个
    增量>0.9
    都标记在
    flags=[如果elem>0.9则为True,否则投标价格中的elem为False]
    。您应该能够轻松地将其调整为您的真实数据集的样子

    绘图:

    使用随机数据完成代码:
    嘿,伙计。数据合成/工程的升级投票。学到了一些新东西,谢谢@这是我的荣幸!当然也有更优雅的方式来做同样的事情。使用
    time=[t代表pd.date\u范围内的t('2020',freq='D',periods=observations.).format()]
    不是很简单或有效。但是我现在没有去查其他的东西。
    # imports
    import plotly.express as px
    import plotly.graph_objects as go
    import pandas as pd
    import numpy as np
    import random
    
    # settings
    observations = 100
    np.random.seed(5); cols = list('a')
    bid_price = np.random.uniform(low=-1, high=1, size=observations).tolist()
    flags = [True if elem > 0.9 else False for elem in bid_price]
    time = [t for t in pd.date_range('2020', freq='D', periods=observations).format()]
    
    
    # bid price
    df1=pd.DataFrame({'time': time, 
                     'bid_price':bid_price})
    df1.set_index('time',inplace = True)
    df1.iloc[0]=0; d1f=df1.cumsum()
    
    # flags
    df2=pd.DataFrame({'time': time, 
                     'flags':flags})
    df2.set_index('time',inplace = True)
    
    df = df1.merge(df2, left_index=True, right_index=True)
    df.bid_price = df.bid_price.cumsum()
    df['flagged'] = np.where(df['flags']==True, df['bid_price'], np.nan)
    
    # plotly setup
    fig = go.Figure()
    
    # trace for bid_prices
    fig.add_traces(go.Scatter(x=df.index, y=df['bid_price'], mode = 'lines',
                             name='bid_price'))
    
    # trace for flags
    fig.add_traces(go.Scatter(x=df.index, y=df['flagged'], mode = 'markers',
                  marker =dict(symbol='triangle-down', size = 16),
                  name='Flag'))
                   
    fig.update_layout(template = 'plotly_dark')
    
    fig.show()