fill_between()不起作用

时间:2017-06-15 01:16:42

标签: python matplotlib fill

我正在处理的图表中存在这个小问题。我想在两条半垂直线之间填充区域,如下所示(蓝绿色和灰色): Cite extension

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

plt.fill_between(x, y_1, y_2, facecolor = 'red')

我做错了什么?

亲切的问候, Greem

1 个答案:

答案 0 :(得分:1)

两条线的x变量的数据范围是完全独立的,因此甚至没有一个点可以在y方向上完成填充。

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

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()

enter image description here

上述解决方案的替代方案可以是绘制一个polgon,两条线的坐标作为其边缘点。

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()

enter image description here