Python:如何为 Pandas DataFrame 创建带有离线绘图的阶梯图?

Ced*_*olo 2 python plot dataframe pandas plotly

假设我们DataFrame生成了以下和相应的图表:

import pandas as pd
import plotly
from plotly.graph_objs import Scatter

df = pd.DataFrame({"value":[10,7,0,3,8]},
index=pd.to_datetime([
"2015-01-01 00:00",
"2015-01-01 10:00",
"2015-01-01 20:00",
"2015-01-02 22:00",
"2015-01-02 23:00"]))
plotly.offline.plot({"data": [Scatter( x=df.index, y=df["value"] )]})
Run Code Online (Sandbox Code Playgroud)

情节图

预期成绩

如果我使用以下代码:

import matplotlib.pyplot as plt
plt.step(df.index, df["value"],where="post")
plt.show()
Run Code Online (Sandbox Code Playgroud)

我得到如下的步骤图:

阶梯图

我怎样才能得到与step函数相同的结果,但offline plotly改为使用?

Ced*_*olo 8

我们可以使用line参数shape选项作为hv使用以下代码:

trace1 = {
  "x": df.index,
  "y": df["value"],
  "line": {"shape": 'hv'},
  "mode": 'lines',
  "name": 'value',
  "type": 'scatter'
};

data = [trace1]
plotly.offline.plot({
    "data": data
})
Run Code Online (Sandbox Code Playgroud)

生成下图:

在此处输入图片说明


小智 7

由于您的数据是 pandas 数据框,除了离线绘图之外,您可以使用绘图表达:

import plotly.express as plx

plx.line(df,line_shape='hv')
Run Code Online (Sandbox Code Playgroud)

其他 line_shape 选项,或给定点之间的插值方法:

  • 'hv' 步骤结束,相当于 pyplot 的 post 选项;
  • ‘vh’步骤开始;
  • 'hvh' 中间步长,x 轴;
  • 'vhv' 中间步进,y 轴;
  • 'spline' 点之间的平滑曲线;
  • 点之间的“线性”线段,line_shape 的默认值。

试试它们吧...

hv = plx.line(df,line_shape='hv')
vh = plx.line(df,line_shape='vh')
vhv = plx.line(df,line_shape='vhv')
hvh = plx.line(df,line_shape='hvh')
spline = plx.line(df,line_shape='spline')
line = plx.line(df,line_shape='linear')
Run Code Online (Sandbox Code Playgroud)

选择其中之一应根据数据的性质......