You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 06:49:25