首页 > 解决方案 > 从 matplotlib 获取阶跃函数值

问题描述

我有 2 个带有数据的 numpy 数组,比如说x,y,我申请plt.step()并获得它的连续(步进)曲线。

我希望能够自己创建此函数,这意味着我希望对原始数组中实际上不存在的yfor的值进行(零阶保持)步长近似。xx

例如,在以下链接中,我想要“新”实际矩形正弦值,而不仅仅是绘制: https ://matplotlib.org/gallery/lines_bars_and_markers/step_demo.html#sphx-glr-gallery-lines-bars -and-markers-step-demo-py

标签: pythonnumpymatplotlibcurve-fitting

解决方案


您可以使用 scipy 的interp1d创建步进函数。默认插值是“线性”,但您可以将其更改为“下一个”、“上一个”或“最近的”以获得阶跃函数。

一个标准的阶跃函数是从中获得的step_fun = interp1d(x, y, kind='previous'),然后将其调用为step_fun(new_x).

以下代码比较了不同类型的“插值”:

from matplotlib import pyplot as plt
import numpy as np
from scipy.interpolate import interp1d

x = np.random.uniform(0.1, 0.7, 20).cumsum()
y = np.sin(x)

kinds = ['linear', 'previous', 'next', 'nearest', 'cubic']
for i, kind in enumerate(kinds):
    function_from_points = interp1d(x, y + i, kind=kind)
    x_detailed = np.linspace(x[0], x[-1], 1000)
    plt.plot(x_detailed, function_from_points(x_detailed), color='dodgerblue')
    plt.scatter(x, y + i, color='crimson')
plt.yticks(range(len(kinds)), kinds)
plt.show()

示例图


推荐阅读