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

如何提取sympy.plot_implicit的绘图坐标点以在matplotlib中设置标签

问题原因

sympy.plot返回的是普通显式绘图的Line2DSeries实例,自带get_points()方法;但sympy.plot_implicit返回的是ImplicitSeries实例,没有实现get_points()接口,所以直接调用会报错。

解决方法

你可以通过两种方式实现需求:

方法1:直接在sympy隐式绘图对象上调用matplotlib接口加标签,无需提取坐标

sympy.plot_implicit底层就是用matplotlib渲染的,你可以直接获取它的matplotlib坐标轴对象,直接修改标签、图例等属性,步骤更简单:

import matplotlib.pyplot as plt
import sympy as sp
from sympy.abc import x,y

def z(x, y):
    return x - y

# 生成隐式绘图对象,不展示
p = sp.plot_implicit(z(x, y), (x, 0, 1), (y, 0, 1), show=False)
# 绑定后端并预处理绘图数据
p._backend = p.backend(p)
p._backend.process_series()
# 获取matplotlib的axes对象
ax = p._backend.ax
# 直接修改第一条曲线的标签
ax.get_children()[2].set_label('x-y=0')
# 添加图例
ax.legend()
plt.show()

方法2:提取隐式绘图的坐标点用于matplotlib绘图

如果确实需要导出坐标点,你可以通过ImplicitSeries的get_meshes()方法获取网格和等值线掩码,再提取符合条件的坐标:

import matplotlib.pyplot as plt
import sympy as sp
from sympy.abc import x,y

def z(x, y):
    return x - y

p = sp.plot_implicit(z(x, y), (x, 0, 1), (y, 0, 1), show=False)
# 获取隐式序列对象
series = p[0]
# 获取x网格、y网格、符合方程的布尔掩码
x_grid, y_grid, mask = series.get_meshes()
# 提取符合方程的坐标点
x_points = x_grid[mask]
y_points = y_grid[mask]

# 导入matplotlib绘图并加标签
plt.scatter(x_points, y_points, s=1, label='x-y=0')
plt.legend()
plt.show()

内容的提问来源于stack exchange,提问作者Benny Rodríguez

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 23:06:01