曲线和对角线之间的填充区域

3

你能帮我解决这个问题吗? 我想知道如何填充曲线和对角线之间的区域(连接(X最小值,Y最小值)至(X最大值,Y最大值)的线)。例如,在以下图中,我们如何将对角线上方的区域填充为红色,下方的区域填充为蓝色。预先感谢您的时间和考虑。

import numpy as np
import matplotlib.pyplot as plt

fig, ax = plt.subplots(figsize = (6,4))
x=np.array([0,1,2,3,4,5,6,7,8,9,10])
y=np.array([0,4,5,5,4,5,6,8,9,9,15])

ax.plot(x,y, color = "red", lw=1.2)
ax.plot([x.min(),x.max()],[y.min(),y.max()], color = "black", lw=1.2)

plt.show()

在提问之前,请至少进行一次谷歌搜索。搜索“plt fill between two lines”的第一个结果会给出您需要的内容:https://matplotlib.org/stable/gallery/lines_bars_and_markers/fill_between_demo.html - kubatucka
2个回答

4

fill_between() 方法是专门为此设计的:

# Create empty figure 
_,ax = plt.subplots()
# Plot the two lines
ax.plot(x,x,color='C0')
ax.plot(x,y,color='C3')
# Plot the area with two conditions (x>y) and (x<=y)
ax.fill_between(x, x, y, where=(x > y), color='C0', alpha=0.2,
                 interpolate=True)
ax.fill_between(x, x, y, where=(x <= y), color='C3', alpha=0.2,
                 interpolate=True)

我们得到了以下内容:

这里输入图片描述


Obchadron,感谢您的回答。很抱歉,我觉得一开始我没有很好地解释我的问题。当我说对角线时,我指的是连接(X min,Y min)到(X max Y max)的线,可以使用ax.plot([x.min(),x.max()],[y.min(),y.max()],color =“black”,lw = 1.2)来绘制。 - Jab

0

感谢obchardon。我做到了。我使用[x.min(),x.max()],[y.min(),y.max()]拟合了一个线性回归模型来定义对角线,并填充曲线与对角线之间的区域。

import numpy as np
from sklearn.linear_model import LinearRegression
import matplotlib.pyplot as plt

fig, ax = plt.subplots(figsize = (6,4))
x=np.array([0,1,2,3,4,5,6,7,8,9,10])
y=np.array([0,4,5,5,4,5,6,8,9,9,15])

ax.plot(x,y, color = "red", lw=1.2)
(m,b)=np.polyfit([x.min(),x.max()] ,[y.min(),y.max()] ,1)
yp = np.polyval([m,b],x)
plt.plot(x,yp, color='black',lw=1)
ax.fill_between(x,y, yp, where=(y > yp), color='red',interpolate=True)
ax.fill_between(x, y, yp, where=(y <= yp), color='blue',interpolate=True)
plt.show()

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接