matplotlib 如何绘制阶跃函数?

a2mppw5e  于 2023-10-24  发布在  其他
关注(0)|答案(6)|浏览(140)

这应该很容易,但我刚刚开始玩弄matplotlib和python。我可以做一条线或散点图,但我不知道如何做一个简单的步骤函数。任何帮助都非常感谢。

x = 1,2,3,4
y = 0.002871972681775004, 0.00514787917410944, 0.00863476098280219, 0.012003316194034325
chhkpiq4

chhkpiq41#

你好像想要step
例如

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()

55ooxyrt

55ooxyrt2#

如果你有非均匀间隔的数据点,你可以使用plotdrawstyle关键字参数:

x = [1,2.5,3.5,4] 
y = [0.002871972681775004, 0.00514787917410944, 
     0.00863476098280219, 0.012003316194034325]

plt.plot(x, y, drawstyle='steps-pre')

另外还有steps-midsteps-post

s8vozzvw

s8vozzvw3#

matplotlib 3.4.0新增功能

有一个新的plt.stairs方法来补充plt.step
plt.stairs和底层的StepPatch提供了一个更清晰的界面,用于为常见的情况绘制逐步常数函数,即您知道阶跃边缘
这取代了plt.step的许多用例,例如在绘制np.histogram的输出时。
查看官方matplotlib库了解如何使用plt.stairsStepPatch

什么时候使用plt.step vs 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.stairsnp.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)

luaexgnf

luaexgnf4#

我想你需要pylab.bar(x,y,width=1)或者同样的pyplot的bar方法。如果不需要,请检查gallery以获得你可以做的许多样式的图。每个图像都带有示例代码,向你展示如何使用matplotlib制作它。

knpiaxh1

knpiaxh15#

画两条线,一条在y=0,一条在y=1,在阶跃函数的x处截断。
例如,如果你想在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()
b4qexyjb

b4qexyjb6#

如果有人只是想简化一些数据,而不是实际绘制它:

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

相关问题