我在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)
使用 line_shape='hv'
对于每个 go.Scatter
来制作。
这样一来,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)
请看一下 此处 了解更多详情和其他选项。