Sympy添加坐标点标记异常:仅显示单个标记的解决求助
问题原因
- 循环结束后
sol变量仅保留最后一个值(6),所以标记只显示在x=6的位置 markers的args参数格式错误,Sympy要求标记点坐标为**(x值列表, y值列表)**,你当前的[sol, [0], a]格式不符合要求
解决方案
根据需求分两种场景给出修正代码:
场景1:标记x轴上x=1~6的位置(y=0)
import numpy as np from sympy import symbols, plot, init_printing x = symbols("x") init_printing(use_unicode=True) ekpr = x**2 # 生成x坐标列表 x_points = np.arange(1, 7, 1) # 对应y坐标全为0 y_points = [0] * len(x_points) plot( ekpr.rewrite(Add), xlim=[0, 8], markers=[{ "args": [x_points, y_points], # 传入x和y的列表 "marker": "o", "color": "blue" # 指定蓝色标记 }] )
场景2:标记曲线y=x²上x=1~6的对应点
如果要标记曲线上的点,只需把y值换成对应函数计算结果:
import numpy as np from sympy import symbols, plot, init_printing x = symbols("x") init_printing(use_unicode=True) ekpr = x**2 x_points = np.arange(1, 7, 1) # 计算每个x对应的y值 y_points = [ekpr.subs(x, val) for val in x_points] plot( ekpr.rewrite(Add), xlim=[0, 8], markers=[{ "args": [x_points, y_points], "marker": "o", "color": "blue" }] )
关键说明
直接传入x和y的列表给markers的args参数,Sympy会自动为每个坐标对绘制标记,不需要多余的循环打印步骤。
内容的提问来源于stack exchange,提问作者Fahrizal
相关产品推荐
相关产品推荐

