Plotly。如何使用最近的值直到新的值可用来处理时间序列中的缺失值?

问题描述 投票:1回答:1

我在pandas中有两个系列。一个有所有日期的条目,一个有零星的条目。

当绘制 df2['Actual'] 在下面的例子中。绘制每个时间点的最新值,而不是在每个记录点之间画一条线的最佳方法是什么。在这个例子中 Actuals 线将在y轴上以90画出,直到2020-06-03时才会跳到280。

import pandas as pd
import plotly.graph_objs as go

d1 = {'Index': [1, 2, 3, 4, 5, 6],
     'Time': ["2020-06-01", "2020-06-02", "2020-06-03", "2020-06-04" ,"2020-06-05" ,"2020-06-06"],
     'Pred': [100, -200, 300, -400 , -500, 600]
    }

d2 = {'Index': [1, 2, 3],
     'Time': ["2020-06-01", "2020-06-03","2020-06-06"],
     'Actual': [90, 280, 650]
    }
df1 = pd.DataFrame(data=d1)
df2 = pd.DataFrame(data=d2)

def plot_over_time(df1, df2):
    fig = go.Figure()
    traces = []
    fig.add_trace(dict(
        x=df1['Time'], y=df1['Pred'],
        mode='lines+markers',
        marker=dict(size=10),
        name = "Preds"))    
    fig.add_trace(dict(
        x=df2['Time'], y=df2['Actual'],
        mode='lines+markers',
        marker=dict(size=10),
        name = "Actuals"))
    fig.show()

plot_over_time(df1, df2)

img

python pandas plotly
1个回答
1
投票

使用 line_shape='hv' 对于每个 go.Scatter 来制作。

enter image description here

这样一来,plotly就会负责数据的视觉表现, 所以在这种情况下就不需要应用pandas了。

完整的代码。

import pandas as pd
import plotly.graph_objs as go

d1 = {'Index': [1, 2, 3, 4, 5, 6],
     'Time': ["2020-06-01", "2020-06-02", "2020-06-03", "2020-06-04" ,"2020-06-05" ,"2020-06-06"],
     'Pred': [100, -200, 300, -400 , -500, 600]
    }

d2 = {'Index': [1, 2, 3],
     'Time': ["2020-06-01", "2020-06-03","2020-06-06"],
     'Actual': [90, 280, 650]
    }
df1 = pd.DataFrame(data=d1)
df2 = pd.DataFrame(data=d2)

def plot_over_time(df1, df2):
    fig = go.Figure()
    traces = []
    fig.add_trace(dict(
        x=df1['Time'], y=df1['Pred'],
        mode='lines+markers',
        marker=dict(size=10),
        name = "Preds", line_shape='hv'))    
    fig.add_trace(dict(
        x=df2['Time'], y=df2['Actual'],
        mode='lines+markers',
        marker=dict(size=10),
        name = "Actuals", line_shape='hv'))
    fig.show()

plot_over_time(df1, df2)

请看一下 此处 了解更多详情和其他选项。

© www.soinside.com 2019 - 2024. All rights reserved.