首页 > 解决方案 > 如何在 Matplotlib 中填充边界空间

问题描述

我需要填充 3 个图形之间的空间,但我不明白如何限制图形 y2 上的区域

import numpy as np
import matplotlib.pyplot as plt

y = lambda z: (4 * z - z ** 2) ** (1 / 2)
y1 = lambda x: (8 * x - x ** 2) ** (1 / 2)
y2 = lambda c: c * 3 ** (1 / 2)
x = np.linspace(0, 12, 100)
z = np.linspace(0, 12, 100)
c = np.linspace(0, 12, 100)
plt.ylim(0, 4)
plt.xlim(0, 4)

plt.plot(z, y(z), color='blue', label="y=(18-x^2)^(1/2)")
plt.plot(c, y2(c))
plt.plot(x, y1(x), color='red', label='y=3*2^(1/2) - (18-x^2)^(1/2)')

plt.grid(True, zorder=5)

plt.fill_between(x, y(z), y1(x), alpha=0.5)

plt.show()

标签: pythonnumpymatplotlibmathplot

解决方案


要填充 abovey和 above的空间y2,您可以取两者中的最大值。为了只填写 where y1is above y2,您可以使用以下where参数:

plt.fill_between(x, np.maximum(y(z), y2(c)), y1(x), where=y2(c)<=y1(x), alpha=0.5)

您可能需要在 s 中使用超过 100 个点linspace来避免没有填充的小区域。对于这张图片,我使用了np.linspace(0, 12, 500).

要拥有更好的标签,您可以使用乳胶格式(用 $ 符号括起来,并为幂添加大括号):

plt.plot(..., label="$y=(18-x^2)^{1/2}$")
plt.plot(..., label='$y=3*2^{1/2} - (18-x^2)^{1/2}$')

要获得平方根符号,请使用 latex 函数\sqrt。要在 Python 字符串中使用反斜杠,反斜杠应该加倍,或者字符串前面应该有一个r原始字符串)。

plt.plot(..., label="$y=\\sqrt{18-x^2}$")
plt.plot(..., color='red', label='$y=3*\\sqrt{2} - \\sqrt{18-x^2}$')

结果图


推荐阅读