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

如何将Sympy不等式区域图与Matplotlib散点图合并展示?

解决方案:Sympy不等式区域与Matplotlib散点同图展示

问题背景

需要绘制不等式函数及其交点区域,使用Sympy的plot_implicit绘制了不等式区域,但无法在Sympy中直接绘制散点;改用Matplotlib绘制散点后,无法将两者合并展示——Sympy的extend方法不兼容Matplotlib散点对象,且不存在网传的plot_point模块。希望保留Sympy绘制不等式线条的优势,实现同图展示。

解决思路

利用Sympy绘图基于Matplotlib的特性,复用Sympy生成的Matplotlib轴对象,直接在该轴上添加散点,无需单独创建新的绘图实例。

修改后的代码

import sympy as sp
from matplotlib import pyplot as plt

# 定义符号变量
x = sp.Symbol('x')
y = sp.Symbol('y')

# 目标函数与散点数据
Funcion = 30000*x + 50000*y
x_vals = [0, 4, 0, 4, 2]
y_vals = [0, 0, 6, 3, 6]

# 不等式列表
Lista_Inecuaciones = [x>=0, y>=0, x<=4, y<=6, 3*x+2*y<=18]
Lista_Combianda_inecuaciones = sp.And(*Lista_Inecuaciones)

# 创建Sympy绘图对象(不提前显示)
plot1 = sp.plot_implicit(Lista_Combianda_inecuaciones, (x, -1, 10), (y, -1, 10), show=False)
plot2 = sp.plot_implicit(sp.sympify(Funcion), line_color="red", show=False)
plot1.extend(plot2)

# 获取Sympy绘图对应的Matplotlib轴,绘制散点
ax = plot1.ax
ax.scatter(x_vals, y_vals, color='blue', marker='o', zorder=5)  # zorder确保散点在最上层

# 展示合并后的图形
plot1.show()

关键说明

  1. 先创建Sympy的plot_implicit对象并设置show=False,避免图形提前渲染
  2. 通过plot1.ax获取底层的Matplotlib轴对象,所有Sympy绘制的内容都在这个轴上
  3. 调用轴的scatter方法添加散点,可通过zorder参数确保散点显示在不等式区域上方
  4. 最后调用plot1.show()完成图形展示

内容的提问来源于stack exchange,提问作者blacks 5574

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 05:55:06