如何将SymPy绘图与Matplotlib绘图合并到同一张图中?
如何将SymPy表达式图像与Matplotlib点集图像合并到同一张图中?
我来帮你搞定这个合并图像的问题!其实核心思路就是让两个绘图工具共用同一个Matplotlib画布和轴,这样就能把点集和表达式曲线放在同一张图里,不用再生成两张独立的图。
修改后的完整代码
from os import remove from matplotlib import pyplot as plt from PIL import Image from sympy import plot, symbols def plot_combined_graphic(x, y, expression, file_name): file = '{}.png'.format(file_name) x_list, y_list = list(x), list(y) # 创建共用的Matplotlib画布和轴 fig, ax = plt.subplots() # 先绘制点集曲线(如果是离散点可以换成scatter) ax.plot(x_list, y_list, label='点集曲线', color='#1f77b4') # 让SymPy直接把表达式曲线画到这个轴上 x_sym = symbols('x') sym_plot = plot( expression.args[1], (x_sym, x_list[0], x_list[-1]), ax=ax, show=False, label='表达式曲线', line_color='#ff7f0e' ) # 给图像加一些必要的标注(可选但推荐) ax.set_xlabel('X 轴') ax.set_ylabel('Y 轴') ax.set_title('点集与表达式曲线合并图') ax.legend() # 保存图像并清理临时文件 plt.savefig(file) plt.close() img = Image.open(file) remove(file) return img
关键细节说明
- 共用绘图轴:创建
fig, ax = plt.subplots()后,所有绘图操作都基于这个ax对象,这是合并的核心 - SymPy适配Matplotlib:SymPy的
plot函数支持ax参数,直接传入Matplotlib的轴对象,就能把表达式曲线叠加到已有的点集图上 - 自定义样式:可以给两条曲线设置不同颜色、标签,再加上图例和坐标轴标题,让图像更易读
- 清理临时文件:和原来的逻辑一样,保存后删除临时文件,返回PIL图像对象
小技巧
如果你的点集是离散的散点,而不是连续曲线,可以把ax.plot(x_list, y_list)改成ax.scatter(x_list, y_list, marker='o', color='#2ca02c', label='离散点集'),这样点会更突出。
内容的提问来源于stack exchange,提问作者R. Rustan
相关产品推荐
相关产品推荐

