如何画这样的东西? 在下一个数据点出现之前,有点像水平线,然后是用于调整位置y的垂直线。 matplotlib中通常的绘图函数只绘制两个数据点之间的直线,这不能满足我的需要。
答案 0 :(得分:3)
您可以使用其中一种抽奖方式"steps-pre"
,"steps-mid"
,"steps-post"
来获得曲线的阶梯式外观。
plt.plot(x,y, drawstyle="steps-pre")
完整示例:
import matplotlib.pyplot as plt
import numpy as np; np.random.seed()
x = np.arange(12)
y = np.random.rand(12)
styles = ["default","steps-pre","steps-mid", "steps-post"]
fig, axes = plt.subplots(nrows=len(styles), figsize=(4,7))
for ax, style in zip(axes, styles):
ax.plot(x,y, drawstyle=style)
ax.set_title("drawstyle={}".format(style))
fig.tight_layout()
plt.show()
答案 1 :(得分:0)
就像@ cricket_007在评论中所说的那样 - 让每个y值在下一个x值处重复。以下是如何使用numpy
实现此目的的方法。
修改强>:
感谢@ImportanceOfBeingErnest的评论,我用一个更简单的解决方案替换了扩展数据的原始代码。
from matplotlib import pyplot as plt
import numpy as np
#producing some sample data
x = np.linspace(0,1,20)
y = np.random.rand(x.shape[0])
#extending data to repeat each y value at the next x value
##x1 = np.zeros(2*x.shape[0]-1)
##x1[::2] = x
##x1[1::2] = x[1:]
x1 = np.repeat(x,2)[1:]
##y1 = np.zeros(2*y.shape[0]-1)
##y1[::2] = y
##y1[1::2] = y[:-1]
y1 = np.repeat(y,2)[:-1]
plt.plot(x1, y1)
plt.show()
结果如下: