如何用for循环向SymPy plot函数传入任意数量参数绘图
实现方法
这个需求完全可以实现,不需要复杂处理,有两种常用方案:
方案1:参数解包(最简洁,适配你的当前需求)
Python原生支持用*运算符把列表/元组等可迭代对象拆分为独立的位置参数传入函数,不需要手动写索引逐个取元素,也能自动适配solve返回结果的长度。
你只需要把最后一行的固定传参替换为解包写法即可:
import sympy as sp x,y,z = sp.symbols("x,y,z") eq = sp.Eq((x**2/4)+(y**2/9),1) solve = sp.solve(eq,y) # 自动把solve里的所有元素拆为独立参数传入plot sp.plot(*solve)
这种写法不管solve返回2个椭圆分支,还是后续你求解其他方程得到更多个待绘制的表达式,都不需要修改绘图调用的代码。
方案2:循环追加(适合需要自定义单条曲线属性的场景)
如果你后续需要给不同的绘制分支单独设置颜色、线型、显示范围等属性,可以先创建空的绘图对象,再通过for循环逐个把表达式追加到绘图对象中:
import sympy as sp x,y,z = sp.symbols("x,y,z") eq = sp.Eq((x**2/4)+(y**2/9),1) solve = sp.solve(eq,y) # 初始化不显示的空绘图对象 plot_obj = sp.plot(show=False) for expr in solve: # 单条曲线也先设置为不显示,追加到总绘图对象 single_curve = sp.plot(expr, show=False)[0] # 这里可以按需给当前曲线设置属性,比如 single_curve.line_color = 'r' plot_obj.append(single_curve) # 所有曲线追加完成后统一显示 plot_obj.show()
内容的提问来源于stack exchange,提问作者Fahim Ahmed
相关产品推荐
相关产品推荐

