【问题标题】:How to fill space to border with in Matplotlib [duplicate]如何在 Matplotlib 中填充边界空间 [重复]
【发布时间】:2020-03-20 22:10:18
【问题描述】:

我需要填充 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()

【问题讨论】:

    标签: python numpy matplotlib math plot


    【解决方案1】:

    要填充yy2 以上的空间,您可以取两者的最大值。为了只填写y1 高于y2 的位置,您可以使用where 参数:

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

    您可能需要在linspaces 中使用超过 100 个点,以避免没有填充的小区域。对于这张图片,我使用了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}$')
    

    要获得平方根符号,请使用乳胶函数\sqrt。要在 Python 字符串中使用反斜杠,反斜杠应该加倍,或者字符串前面应该有 r (raw string)。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-01-26
      • 1970-01-01
      • 1970-01-01
      • 2021-02-13
      • 2013-06-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多