如何在Python中填充多条曲线之间的区域?

3
如何在这段代码中为四条曲线之间的区域填充颜色?其中两条曲线是两个点之间的连接。我尝试了以下脚本。倒数第二行是错误的。
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.patches as patches

x_shift = 140.5
b = 50
const = 28.3

fig, ax = plt.subplots()
plt.rcParams["figure.figsize"] = [10, 3]

r = np.sqrt(36000)
theta_zoom1 = np.linspace(-0.14*np.pi, 0, 10000)
x1_zoom1 = r*np.cos(theta_zoom1) - x_shift
x2_zoom1 = r*np.sin(theta_zoom1) + b
theta_zoom2 = np.linspace(-0.156*np.pi, 0, 10000)
x1_zoom2 = r*np.cos(theta_zoom2) - x_shift
x2_zoom2 = r*np.sin(theta_zoom2) + b

ax.plot(x1_zoom1 + const, x2_zoom1)
ax.plot(x1_zoom2 + 3*const, x2_zoom2)

plt.plot([60, 130],[-9.2, -9.2])
plt.plot([70, 140],[35.7, 35.7])

ax.fill_between(x2_zoom1, x2_zoom2)

plt.show()

错误结果:

输入图片说明

期望结果: 输入图片说明


1
你知道这四个交点吗,还是想让matplotlib为你计算它们? - Mad Physicist
我知道如何计算它们,或者我可以猜测它们,因为我不需要那么精确。因此,我们可以说我知道它们。 - Elena Greg
1
简短回答。您需要合并数据或三次调用 fill_between。我用平行四边形作为例子可以吗? - Mad Physicist
谢谢,期待您的回答。如果您不介意,能否使用我的示例?我不确定是否可以将曲线组合作为函数,并在两个点之间使用直线作为边界。 - Elena Greg
1
另外,你能否发布预期的正确结果,即使只是在MS-Paint中完成的洪水填充? - Mad Physicist
我发布了一个大致的期望结果。 - Elena Greg
1个回答

3
您可以使用ax.fill_betweenx()填充区域。这需要一个共同的y值数组和两个相应的x值数组。np.interp()可用于将现有曲线与新的y值进行匹配。请注意,给定的y值需要严格按照增加顺序排列才能正常工作。
import numpy as np
import matplotlib.pyplot as plt

x_shift = 140.5
b = 50
const = 28.3

fig, ax = plt.subplots()
plt.rcParams["figure.figsize"] = [10, 3]

r = np.sqrt(36000)
theta_zoom1 = np.linspace(-0.14 * np.pi, 0, 10000)
x1_zoom1 = r * np.cos(theta_zoom1) - x_shift
x2_zoom1 = r * np.sin(theta_zoom1) + b
theta_zoom2 = np.linspace(-0.156 * np.pi, 0, 10000)
x1_zoom2 = r * np.cos(theta_zoom2) - x_shift
x2_zoom2 = r * np.sin(theta_zoom2) + b

ax.plot(x1_zoom1 + const, x2_zoom1)
ax.plot(x1_zoom2 + 3*const, x2_zoom2)

ax.plot([60, 130], [-9.2, -9.2])
ax.plot([70, 140], [35.7, 35.7])

y_fill = np.linspace(-9.2, 35.7, 200)
x_fill1 = np.interp(y_fill, x2_zoom1, x1_zoom1 + const)
x_fill2 = np.interp(y_fill, x2_zoom2, x1_zoom2 + 3*const)

ax.fill_betweenx(y_fill, x_fill1, x_fill2, color='crimson', alpha=0.3)

plt.show()

resulting plot


非常感谢您的帮助。 - Elena Greg

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