我有兩個 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 的區域,其中 y1<y2,僅繪制 y2 的區域,其中 y2<y1。像這樣的東西。

由于 x1 和 x2 不同,我不能使用 np.minimum()。有沒有一種有效的方法可以用 numpy 和/或 matplotlib 做到這一點?
我想有一個通用的方法,當 y1 和 y2 不是由我知道的某些函式確定的,而是從例如資料集獲取時,它也適用。
uj5u.com熱心網友回復:
您可以將兩個函式插入到一個公共 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()

uj5u.com熱心網友回復:
一種解決方案是使用其他 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()
輸出:

轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/357814.html
標籤:Python 麻木的 matplotlib
上一篇:使用matplotlib設定x軸
