用Python填充两条曲线之间的区域

8
我正在尝试对我绘制的两个曲线之间的区域进行着色。 这是我绘制的内容。 enter image description here 使用以下代码:
plt.scatter(z1,y1, s = 0.5, color = 'blue')
plt.scatter(z2,y2, s = 0.5, color = 'orange')

我尝试使用 plt.fill_between(),但为了使其正常工作,我需要在x_axis上具有相同的数据(需要执行类似于plt.fill_between(x,y1,y2)的操作)。是否有其他函数可以帮助解决这个问题或者我只是使用了fill_between错误的方法?

2个回答

8
您可以试试以下方法:
plt.fill(np.append(z1, z2[::-1]), np.append(y1, y2[::-1]), 'lightgrey')

例如:

import numpy as np
import matplotlib.pyplot as plt

x1 = np.array([1,2,3])
y1 = np.array([2,3,4])
x2 = np.array([2,3,4,5,6])
y2 = np.array([1,2,3,4,5])
# plt.plot(x1, y1, 'o')
# plt.plot(x2, y2, 'x')

plt.scatter(x1, y1, s = 0.5, color = 'blue')
plt.scatter(x2, y2, s = 0.5, color = 'orange')
plt.fill(np.append(x1, x2[::-1]), np.append(y1, y2[::-1]), 'lightgrey')
plt.show()

enter image description here


使用此代码时,我遇到了以下错误。ValueError: x 和 y 必须具有相同的第一维度,但它们的形状分别为 (107156,) 和 (168560,)。 - Susan-l3p
我发布的代码初稿中有错误,请现在再试一下 :) - Joe
1
这个很好地解决了。谢谢!现在只有最后一件事情了。所以,阴影区现在有点覆盖了我的初始图。我能否将其“发送到后面”?不太确定你是否明白我的意思。 - Susan-l3p
不用谢。也许您可以设置透明度?添加此参数:alpha=0.4 - Joe

0

尝试这段代码:

import matplotlib.pyplot as plt
import numpy as np

x = np.arange(0.0, 2, 0.01)
y1 = np.sin(2 * np.pi * x)
y2 = 1.2 * np.sin(4 * np.pi * x)


fig, (ax1) = plt.subplots(1, sharex=True)
ax1.fill_between(x, 0, y1)
ax1.set_ylabel('between y1 and 0')

你在这里创建自己的数据吗?我该如何将其应用到我已有的数据中? - Susan-l3p
1
欢迎来到StackOverflow。请正确格式化和缩进您的答案,如有可能,请进一步阐述。祝编码愉快! - Arka Mukherjee
这个答案没有解决 OP 的问题的原因是 x 值在两条曲线中不同。这个答案假设 x 是相同的。否则,如果你的 x 是相同的,那么这个方法就可以解决问题了。 - Gene Burinsky

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