2017-07-07 76 views
1

我使用matplotlib从数据帧绘制一些阶跃函数Matplotlib情节只有水平线步骤情节

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

结果看起来像

enter image description here

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

回答

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