【问题标题】:Plot minimum of two arrays绘制两个数组的最小值
【发布时间】:2021-11-16 11:35:31
【问题描述】:

我有两个用于 x 值的数组和两个对应的 y 值数组,我希望绘制它们。

import numpy as np
import matplotlib.pyplot as plt

x1 = np.linspace(-2,2,100)
x2 = np.linspace(0,4,100)

y1 = x1**2+1
y2 = (x2-1.5)**2

plt.plot(x1,y1)
plt.plot(x2,y2)
plt.show()

这会产生以下情节。

但是,我只想绘制这两条曲线的最小值,即仅绘制 y1

由于 x1 和 x2 不同,我不能使用 np.minimum()。有没有使用 numpy 和/或 matplotlib 的有效方法?

我想有一个通用的方法,当 y1 和 y2 不是从我知道的某个函数确定的,而是取自例如一个数据集。

【问题讨论】:

  • 所以你想要某种分段函数,例如y1 for x<0.5 else y2?您写道您想绘制两个函数的最小值,但这不是您要绘制的?

标签: python numpy matplotlib


【解决方案1】:

您可以将这两个函数插入到一个公共 x 上,然后取它们的最小值。

import numpy as np
import matplotlib.pyplot as plt

x1 = np.linspace(-2, 2, 100)
x2 = np.linspace(0, 4, 100)

y1 = x1 ** 2 + 1
y2 = (x2 - 1.5) ** 2

plt.plot(x1, y1, ls=':')
plt.plot(x2, y2, ls=':')
xc = np.sort(np.concatenate([x1, x2]))
y1c = np.interp(xc, x1, y1, left=y2.max(), right=y2.max())
y2c = np.interp(xc, x2, y2, left=y1.max(), right=y1.max())

plt.plot(xc, np.minimum(y1c, y2c), lw=10, alpha=0.4)
plt.show()

【讨论】:

    【解决方案2】:

    一种解决方案是使用其他 xs 和掩码交叉计算函数:

    import numpy as np
    import matplotlib.pyplot as plt
    
    x1 = np.linspace(-2,2,100)
    x2 = np.linspace(0,4,100)
    
    y1 = x1**2+1
    y1b = x2**2+1
    
    y2 = (x2-1.5)**2
    y2b = (x1-1.5)**2
    
    plt.plot(x1, np.where(y1<y2b, y1, np.nan))
    plt.plot(x2, np.where(y2<y1b, y2, np.nan))
    plt.show()
    

    输出:

    【讨论】:

    • 这适用于这种特定情况,但我也想要一个更通用的解决方案;当我不通过已知函数自己定义 y1 和 y2 而是从数据集中提取它们时,它会起作用。
    • @TheOne 我明白了,你应该提到它,我会提出不同的方法;)
    猜你喜欢
    • 2013-11-04
    • 2019-02-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-05
    • 2017-06-22
    • 1970-01-01
    • 2015-10-27
    相关资源
    最近更新 更多