You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

matplotlib绘图报'tlim'属性不存在错误及多曲线合并绘制问题

报错原因

'Line2D' object has no property 'tlim' 报错根源是参数传错位置:

  • tlim/ylim 不是plt.plot()的合法参数,这两个是坐标轴范围配置项,需要调用独立的方法设置,不能直接传入plot函数。
  • 原代码还有两个隐藏问题:一是sympy求解得到的psol.rhs是符号表达式,不能直接被matplotlib识别绘图;二是末尾的plt.show没加括号,不会触发绘图窗口渲染。
修复方案

要把三条解曲线合并到同一张图,按以下步骤修改即可:

  • 用numpy.linspace生成自变量t在目标区间[0,10]的密集数值采样点
  • 用sympy自带的lambdify工具,把三个符号形式的特解转为支持numpy数组输入的数值计算函数,批量算出对应y值
  • 调用plt.plot()时只传入x、y数值数组,为三条曲线添加区分用的标签
  • 单独调用plt.xlim()、plt.ylim()设置坐标轴范围,补充图例、坐标轴标签后,加括号调用plt.show()渲染图像
修改后可直接运行的完整代码
import numpy as np 
from sympy import symbols, Function, Eq, dsolve, lambdify
import matplotlib.pyplot as plt

# 定义符号变量、函数与三类二阶齐次线性微分方程
t = symbols('t')
y = symbols('y', cls=Function)

deq1 = Eq(y(t).diff(t, 2) + 10*y(t).diff(t) + 9*y(t), 0)
deq2 = Eq(y(t).diff(t, 2) + 6*y(t).diff(t) + 9*y(t), 0)
deq3 = Eq(y(t).diff(t, 2) + y(t).diff(t) + 9*y(t), 0)

# 代入统一初始条件求解特解
init_condition = {y(0): 0.16, y(t).diff(t).subs(t, 0): 0}
psol1 = dsolve(deq1, ics=init_condition)
psol2 = dsolve(deq2, ics=init_condition)
psol3 = dsolve(deq3, ics=init_condition)

# 符号解转数值函数,生成绘图用的采样数据
t_sample = np.linspace(0, 10, 1000)
cal_y1 = lambdify(t, psol1.rhs, 'numpy')
cal_y2 = lambdify(t, psol2.rhs, 'numpy')
cal_y3 = lambdify(t, psol3.rhs, 'numpy')

y1_sample = cal_y1(t_sample)
y2_sample = cal_y2(t_sample)
y3_sample = cal_y3(t_sample)

# 同一画布绘制三条解曲线
plt.figure(figsize=(10, 6))
plt.plot(t_sample, y1_sample, label='过阻尼特征')
plt.plot(t_sample, y2_sample, label='临界阻尼特征')
plt.plot(t_sample, y3_sample, label='欠阻尼特征')

# 配置图表样式
plt.xlim(0, 10)
plt.ylim(-0.1, 0.15)
plt.xlabel('时间 t')
plt.ylabel('响应 y(t)')
plt.legend()
plt.grid(alpha=0.3)

plt.show()

内容的提问来源于stack exchange,提问作者spg

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.31 08:27:23