如何提取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
相关产品推荐
相关产品推荐

