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

如何解决Sympy绘制隐函数cons12=0时线条过粗的问题

Sympy隐函数绘图效果优化方案

sympy自带的plot_implicit默认采样精度低、线宽偏大,是导致绘图效果差的核心原因,可通过以下两种方案优化:

方案1:直接调整plot_implicit内置参数

通过调高采样深度、缩小线宽即可快速改善效果,示例代码如下:

p = plot_implicit(
    Eq(cons12, 0),
    (b, 0, 4),
    (d, 0, 6),
    depth=6, # 采样深度,默认值为2,数值越高采样越密、线条越平滑,对应计算耗时更长
    linewidth=0.7, # 线宽,默认值为1.5,调小即可得到更细的线条
    adaptive=True # 开启自适应采样,曲线变化剧烈的区域会自动加密采样点
)

方案2:转数值函数用Matplotlib原生绘制(更推荐)

sympy的绘图功能是对Matplotlib的简化封装,可调参数少,直接将符号表达式转为数值函数后用Matplotlib的contour绘制,效果可控度更高:

from sympy import lambdify, nsimplify
import numpy as np
import matplotlib.pyplot as plt

# 可选:先将表达式转有理式,降低数值计算误差
cons12_rational = nsimplify(cons12)
# 把符号表达式转为可批量计算的数值函数
f_cons = lambdify((b, d), cons12_rational, 'numpy')

# 生成坐标网格,网格点数越高线条越平滑,2000~3000点为常规精度
b_arr = np.linspace(0, 4, 2000)
d_arr = np.linspace(0, 6, 2000)
b_grid, d_grid = np.meshgrid(b_arr, d_arr)

# 计算网格点上的函数值
z_val = f_cons(b_grid, d_grid)

# 绘制0值等高线,即cons12=0的隐函数曲线
plt.figure(figsize=(7, 8))
plt.contour(
    b_grid, d_grid, z_val,
    levels=[0], # 仅绘制值为0的等高线
    linewidths=0.6, # 自定义线宽
    colors='darkblue' # 自定义线条颜色
)
plt.xlabel('b', fontsize=12)
plt.ylabel('d', fontsize=12)
plt.xlim(0, 4)
plt.ylim(0, 6)
plt.grid(alpha=0.2)
plt.show()

如果绘制时出现线条断裂、锯齿明显的问题,可继续调高网格生成时linspace的点数,若出现数值溢出报错,可将contour的输入改为np.sign(z_val),仅保留函数值的正负信息即可识别零值位置。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.13 10:12:00