如何在SymPy中直接绘制点?坐标列表传入报错求解
SymPy直接绘制点的正确方法
SymPy的plot()函数默认用于绘制符号表达式,直接传入纯数值列表会报错,因为它无法将离散数值解析为可迭代的符号对象。下面是两种正确的直接绘点方式:
方法1:使用plot_discrete(推荐,专门用于离散点)
plot_discrete是SymPy专门为绘制离散点设计的函数,适合单个或多个点的场景:
from sympy import plot_discrete # 绘制单个点 (-1, 2.5) x_points = [-1] y_points = [2.5] plot_discrete(x_points, y_points, markers='ro') # 'ro'表示红色圆点 # 绘制多个点 x_points = [-1, 0, 1, 2] y_points = [2.5, 3, 1.5, 4] plot_discrete(x_points, y_points, markers='bo') # 'bo'表示蓝色圆点
方法2:通过plot()结合空表达式+markers参数
如果不想额外导入函数,可以用plot()传入空的表达式列表,再通过markers参数指定点坐标:
from sympy import plot # 单个点 plot([], markers=[{'args': [-1, 2.5, 'ro']}], xlim=(-2, 2), ylim=(1, 3)) # 多个点 points = [(-1, 2.5), (0, 3), (1, 1.5)] plot([], markers=[{'args': [x, y, 'go']} for x, y in points], xlim=(-2, 2), ylim=(1, 4))
为什么之前的调用会报错?
你直接传入plot([-1], [2.5])时,SymPy会尝试将这些数值列表当作符号表达式处理,但数值列表不是SymPy认可的符号对象或可迭代的表达式集合,因此触发TypeError: 'NoneType' object is not iterable错误。
内容的提问来源于stack exchange,提问作者mins
相关产品推荐
相关产品推荐

