使用matlotlib绘制下图:
import numpy as np
import matplotlib.pyplot as plt
from matplotlib.patches import Polygon
def func(x):
return -(x - 2) * (x - 8) + 40
x = np.linspace(0, 10)
y = func(x)
fig, ax = plt.subplots()
plt.plot(x, y, 'r', linewidth=2)
a, b = 2, 9
# 坐标轴只显示设定值
ax.set_xticks([a, b])
ax.set_yticks([])
# 给设定值打标签
ax.set_xticklabels(['$a$', '$b$'])
# 在图中任意位置添加文本,设置值为0-1(比例值)
plt.figtext(0.88, 0.08, '$x$')
plt.figtext(0.1, 0.86, '$y$')
# 多边形绘制
ix = np.linspace(a, b) # 横坐标
iy = func(ix) # 对应纵坐标
ixy = zip(ix, iy) # 坐标点
verts = [(a, 0)] + list(ixy) + [(b, 0)] # 多边形绘制需要传输有坐标点组成的2xN的数组
polygon = Polygon(verts, facecolor='0.5', edgecolor='0.1')
ax.add_patch(polygon)
# 添加Tex公式
x_math = (a + b) / 2 # 公式x轴位置
y_math = 30 # 公式y轴位置
plt.text(x_math, y_math, r'$\int_a^b (-(x - 2) * (x - 8) + 40)dx$', fontsize=15, horizontalalignment='center')
plt.show()