python - 在 Matplotlib 中填充 3 个图形之间的空间
问题描述
我需要填写图表之间的阴影区域。我应该在 fill_between 中写什么来做到这一点?
import numpy as np
import matplotlib.pyplot as plt
y = lambda z: (2 * z - z ** 2) ** (1 / 2)
y1 = lambda x: (6 * x - x ** 2) ** (1 / 2)
y2 = lambda c: c
x = np.linspace(0, 12, 500)
z = np.linspace(0, 12, 500)
c = np.linspace(0, 12, 500)
plt.ylim(0, 4)
plt.xlim(0, 4)
plt.plot(z, y(z), color='blue', label="$y=\\sqrt{2x-x^2}$")
plt.plot(c, y2(c), color='black', label='$y=x$')
plt.plot(x, y1(x), color='red', label='$y=\\sqrt{6x-x^2}$')
plt.plot([0, 4], [0, 0], color='yellow', label='y=0')
plt.grid(True, zorder=5)
miny = np.minimum(y2(c), y1(x))
plt.fill_between(x, y(z), miny, where=(miny > y(x)), alpha=0.5)
plt.legend()
plt.show()
解决方案
使您的函数的域相同(例如[0, 4]
)。下面的代码做你想要的:
import numpy as np
import matplotlib.pyplot as plt
x = np.linspace(0, 4, 500)
y = np.piecewise(x, [x <= 2, x > 2], [lambda x: np.sqrt(2 * x - x ** 2), 0])
y1 = np.sqrt(6 * x - x ** 2)
y2 = x
y3 = 0*x
plt.plot(x, y, color='blue', label="$y=\\sqrt{2x-x^2}$")
plt.plot(x, y1, color='red', label='$y1=\\sqrt{6x-x^2}$')
plt.plot(x, y2, color='black', label='$y2=x$')
plt.plot(x, y3, color='yellow', label='y3=0')
plt.grid(True, zorder=5)
miny = np.minimum(y2, y1)
plt.fill_between(x, y, miny, where = (miny > y), alpha=0.5)
plt.legend()
plt.show()
推荐阅读
- javascript - Android webview 显示旧网站内容而不是新网站内容
- r - 查找 0 和 1 的所有组合以及特定数量的 1
- java - 字符串与输入字符串的连接
- javascript - Dynamics CRM 使用 XrmServiceToolkit.Soap 获取全局 OptionSet 数据
- python - 递归函数完成后返回 0。为什么'return 0'不覆盖函数的先前返回值?
- python - Python中非英语语言的拼写检查器
- ios - iOS MPMediaItem:在 iTunes 中设置的选项
- android - 在android的折线图中绘制Json数据
- ios - 在 React Native 中更新应用后维护 Session
- python - 从 SET 数据类型中提取匹配表达式