如何使用Sympy plot在指定x坐标位置添加标记点
实现方法
Sympy的plot接口底层基于Matplotlib渲染,有两种常用方案可以添加指定坐标的标记:
方案1:调用底层Matplotlib接口(灵活性更高)
你可以直接获取Sympy绘图对象对应的Matplotlib坐标轴实例,用常规Matplotlib语法添加标记,完整代码如下:
import numpy as np import sympy as sp x = sp.Symbol('x') xs = np.linspace(-2, 3, 5) ys = sp.cos(2*x)*(sp.sin(2*x) + 1.5)+sp.cos(x) # 先创建绘图对象,关闭自动显示避免重复渲染 graph = sp.plot(ys, xlim=[-2,3], show=False) # 将符号函数转换为支持数值计算的函数 f_numeric = sp.lambdify(x, ys, modules='numpy') # 计算指定x坐标对应的y值 y_markers = f_numeric(xs) # 获取Matplotlib坐标轴实例 ax = graph._backend.ax[0] # 绘制红色圆形标记,zorder设为较高值保证标记显示在曲线上方 ax.scatter(xs, y_markers, c='red', s=100, zorder=5) # 显示最终图像 graph.show()
方案2:使用Sympy原生markers参数(代码更简洁)
如果不需要额外调整Matplotlib属性,也可以直接在创建plot对象时传入标记参数:
import numpy as np import sympy as sp x = sp.Symbol('x') xs = np.linspace(-2, 3, 5) ys = sp.cos(2*x)*(sp.sin(2*x) + 1.5)+sp.cos(x) # 转换符号函数、计算标记点坐标 f_numeric = sp.lambdify(x, ys, modules='numpy') y_markers = f_numeric(xs) # 构造标记配置 marker_config = [{'args': [xs, y_markers, 'ro'], 'ms': 10, 'zorder': 5}] # 绘图时传入标记配置 graph = sp.plot(ys, xlim=[-2,3], markers=marker_config)
两种方案都可以在你指定的xs坐标位置生成红色高亮标记,和你期望的目标效果一致。
内容的提问来源于stack exchange,提问作者Gytis Dokšas
相关产品推荐
相关产品推荐

