这应该很简单,但我刚刚开始使用matplotlib和python。我可以做一个直线或散点图,但我不知道如何做一个简单的步骤函数。非常感谢任何帮助。
x = 1,2,3,4
y = 0.002871972681775004, 0.00514787917410944, 0.00863476098280219, 0.012003316194034325
答案 0 :(得分:49)
好像你想要step
。
E.g。
import matplotlib.pyplot as plt
x = [1,2,3,4]
y = [0.002871972681775004, 0.00514787917410944,
0.00863476098280219, 0.012003316194034325]
plt.step(x, y)
plt.show()
答案 1 :(得分:12)
如果您有非均匀间隔的数据点,则可以使用plot
的{{3}}关键字参数:
x = [1,2.5,3.5,4]
y = [0.002871972681775004, 0.00514787917410944,
0.00863476098280219, 0.012003316194034325]
plt.plot(x, y, drawstyle='steps-pre')
还提供steps-mid
和steps-post
。
答案 2 :(得分:1)
只画两条线,一条在y = 0,另一条在y = 1,切断你的步长函数的x
?
e.g。如果你想在x=2.3
从0步到1并从x=0
到x=5
进行绘图:
import matplotlib.pyplot as plt
# _
# if you want the vertical line _|
plt.plot([0,2.3,2.3,5],[0,0,1,1])
#
# OR:
# _
# if you don't want the vertical line _
#plt.plot([0,2.3],[0,0],[2.3,5],[1,1])
# now change the y axis so we can actually see the line
plt.ylim(-0.1,1.1)
plt.show()
答案 3 :(得分:1)
我认为你想要pylab.bar(x,y,width=1)
或同样pyplot
的bar方法。如果没有结帐gallery,你可以做多种风格的情节。每张图片都附带示例代码,向您展示如何使用matplotlib制作它。
答案 4 :(得分:1)
有一个新的 plt.stairs
方法来补充 plt.step
:
plt.stairs
和底层的 StepPatch
提供了一个更清晰的界面,用于为常见的您知道阶梯边缘的情况绘制逐步常数函数。
这取代了 plt.step
的许多用例,例如在绘制 np.histogram
的输出时。
查看 how to use plt.stairs
and StepPatch
的官方 matplotlib 库。
plt.step
与 plt.stairs
如果您有参考点,请使用原始的 plt.step
。此处的步骤锚定在 [1,2,3,4]
处并扩展到左侧:
plt.step(x=[1,2,3,4], y=[20,40,60,30])
如果您有边,请使用新的 plt.stairs
。前面的[1,2,3,4]
步点对应[1,1,2,3,4]
楼梯边缘:
plt.stairs(values=[20,40,60,30], edges=[1,1,2,3,4])
plt.stairs
与 np.histogram
一起使用由于 np.histogram
返回边,它直接与 plt.stairs
一起使用:
data = np.random.normal(5, 3, 3000)
bins = np.linspace(0, 10, 20)
hist, edges = np.histogram(data, bins)
plt.stairs(hist, edges)
答案 5 :(得分:0)
如果有人只是想逐步确定某些数据而不是实际绘制它:
def get_x_y_steps(x, y, where="post"):
if where == "post":
x_step = [x[0]] + [_x for tup in zip(x, x)[1:] for _x in tup]
y_step = [_y for tup in zip(y, y)[:-1] for _y in tup] + [y[-1]]
elif where == "pre":
x_step = [_x for tup in zip(x, x)[:-1] for _x in tup] + [x[-1]]
y_step = [y[0]] + [_y for tup in zip(y, y)[1:] for _y in tup]
return x_step, y_step