Matplotlib仅在步骤图中绘制水平线

时间:2017-07-07 01:28:46

标签: matplotlib

我正在使用matplotlib从数据框中绘制一些步骤函数

df['s1'].plot(c='b', drawstyle="steps-post")
df['s2'].plot(c='b', drawstyle="steps-post")
...

结果如

enter image description here

我想这只绘制水平线,而不是连接跳跃点的垂直线。我找不到一个简单的情节参数,似乎这样做。有没有办法做到这一点?

1 个答案:

答案 0 :(得分:1)

据我所知,没有内置选项可以生成没有垂直线的阶梯函数。但你可以轻松自己建造一个。以下使用了np.nan未绘制并切断线的事实。因此,在步骤之间添加np.nan会抑制垂直线。

import matplotlib.pyplot as plt
import numpy as np

def mystep(x,y, ax=None, **kwargs):
    x = np.array(x)
    y = np.array(y)
    X = np.c_[x[:-1],x[1:],x[1:]]
    Y = np.c_[y[:-1],y[:-1],np.zeros_like(x[:-1])*np.nan]
    if not ax: ax=plt.gca()
    return ax.plot(X.flatten(), Y.flatten(), **kwargs)

x = [1,3,4,5,8,10,11]
y = [5,4,2,7,6,4,4]

mystep(x,y, color="crimson")

plt.show()

enter image description here