如何将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()
关键说明
- 先创建Sympy的
plot_implicit对象并设置show=False,避免图形提前渲染 - 通过
plot1.ax获取底层的Matplotlib轴对象,所有Sympy绘制的内容都在这个轴上 - 调用轴的
scatter方法添加散点,可通过zorder参数确保散点显示在不等式区域上方 - 最后调用
plot1.show()完成图形展示
内容的提问来源于stack exchange,提问作者blacks 5574
相关产品推荐
相关产品推荐

