Python 在()之间填充不起作用

Python 在()之间填充不起作用,python,matplotlib,fill,Python,Matplotlib,Fill,我正在制作的图表有一个小问题。我想填充两条半垂直线之间的区域,如下图所示(浅绿色和灰色线): 但是,当我使用以下代码时,我什么也得不到: plt.fill_between(x, y_1, y_2, facecolor = 'red') 我做错了什么 亲切问候,, Greem两行x变量的数据范围是完全分开的,因此甚至没有一个点可以在y方向上进行填充 您可能需要在x方向填充,这可以使用fill\u betweenx完成。现在的问题是,两条线的y值不同。因此,需要对它们进行插值,以便fill_be

我正在制作的图表有一个小问题。我想填充两条半垂直线之间的区域,如下图所示(浅绿色和灰色线):

但是,当我使用以下代码时,我什么也得不到:

plt.fill_between(x, y_1, y_2, facecolor = 'red')
我做错了什么

亲切问候,,
Greem

两行x变量的数据范围是完全分开的,因此甚至没有一个点可以在y方向上进行填充

您可能需要在x方向填充,这可以使用
fill\u betweenx
完成。现在的问题是,两条线的y值不同。因此,需要对它们进行插值,以便
fill_betweenx
可以为两条曲线之间的填充使用相同的y值,这两条曲线最初具有不同的y值,用于不同的x值

import numpy as np
import matplotlib.pyplot as plt

x1 = np.array([1.00, 1.20, 1.30, 1.55, 1.60])
x2 = np.array([1.82, 1.91, 2.14, 2.26, 2.34])

y1 = np.array([1.03, 1.20, 1.28, 1.42, 1.71])
y2 = np.array([0.90, 1.10, 1.31, 1.42, 1.58])

fig, ax= plt.subplots()
ax.plot(x1,y1, color="indigo")
ax.plot(x2,y2, color="crimson")

yi = np.sort(np.c_[y1,y2].flatten()) 
x1i = np.interp(yi, y1, x1)
x2i = np.interp(yi, y2, x2)

ax.fill_betweenx(yi, x1i, x2i, color="lemonchiffon")

plt.show()

上述解决方案的替代方案是绘制一个多边形,将两条线的坐标作为其边点

import numpy as np
import matplotlib.pyplot as plt

x1 = np.array([1.00, 1.20, 1.30, 1.55, 1.60])
x2 = np.array([1.82, 1.91, 2.14, 2.26, 2.34])

y1 = np.array([1.03, 1.20, 1.28, 1.42, 1.71])
y2 = np.array([0.90, 1.10, 1.31, 1.42, 1.58])

fig, ax= plt.subplots()
ax.plot(x1,y1, color="indigo")
ax.plot(x2,y2, color="crimson")

x = np.append(x1,x2[::-1])
y = np.append(y1,y2[::-1])

p = plt.Polygon(np.c_[x,y], color="lemonchiffon")
ax.add_patch(p)

plt.show()

两行的x变量的数据范围是完全分开的,因此甚至没有一个点可以在y方向上进行填充

您可能需要在x方向填充,这可以使用
fill\u betweenx
完成。现在的问题是,两条线的y值不同。因此,需要对它们进行插值,以便
fill_betweenx
可以为两条曲线之间的填充使用相同的y值,这两条曲线最初具有不同的y值,用于不同的x值

import numpy as np
import matplotlib.pyplot as plt

x1 = np.array([1.00, 1.20, 1.30, 1.55, 1.60])
x2 = np.array([1.82, 1.91, 2.14, 2.26, 2.34])

y1 = np.array([1.03, 1.20, 1.28, 1.42, 1.71])
y2 = np.array([0.90, 1.10, 1.31, 1.42, 1.58])

fig, ax= plt.subplots()
ax.plot(x1,y1, color="indigo")
ax.plot(x2,y2, color="crimson")

yi = np.sort(np.c_[y1,y2].flatten()) 
x1i = np.interp(yi, y1, x1)
x2i = np.interp(yi, y2, x2)

ax.fill_betweenx(yi, x1i, x2i, color="lemonchiffon")

plt.show()

上述解决方案的替代方案是绘制一个多边形,将两条线的坐标作为其边点

import numpy as np
import matplotlib.pyplot as plt

x1 = np.array([1.00, 1.20, 1.30, 1.55, 1.60])
x2 = np.array([1.82, 1.91, 2.14, 2.26, 2.34])

y1 = np.array([1.03, 1.20, 1.28, 1.42, 1.71])
y2 = np.array([0.90, 1.10, 1.31, 1.42, 1.58])

fig, ax= plt.subplots()
ax.plot(x1,y1, color="indigo")
ax.plot(x2,y2, color="crimson")

x = np.append(x1,x2[::-1])
y = np.append(y1,y2[::-1])

p = plt.Polygon(np.c_[x,y], color="lemonchiffon")
ax.add_patch(p)

plt.show()

y
如果两个
y
是有效的,因此在这两个
y
值之间填充,则
fill\u有效。请尝试在代码中添加'interpolate=True'元素。您也可以按说明尝试
interpolate=True
在这种情况下没有帮助
fill\u betweenx
需要一些手动插值才能工作,如下面的答案所示。
fill\u between
如果两个
y
s有效,从而在这两个
y
值之间进行填充,则可以工作。请尝试在代码中添加'interpolate=True'元素。您也可以按照说明的那样尝试
interpolate=True
,这样做没有帮助这个案子
fill_betweenx
需要一些手动插值才能工作,如下面的答案所示。