Matplotlib多曲线绘制时G与t维度不匹配报错问题求解
问题解决方案
错误根因
- 你当前代码中
L和Lc各有9个元素,外层循环跑9次,每次内层循环往一维列表G里追加50个值,最终G总长度为9*50=450,和长度为50的t维度自然不匹配,触发第一个报错 - 如果把
plt.plot放在第二层循环内,全局的G会持续追加内容,第二次内层循环时G长度就变成100,和t的50长度不匹配,触发第二个报错 - 额外注意:原代码的matplotlib导入错误,导入的是matplotlib主模块而非绘图用的pyplot子模块,即便维度匹配也会调用
plot失败
修正代码(按需求绘制5组曲线)
import mpmath as mp import numpy as np import matplotlib.pyplot as plt # 修正matplotlib导入错误 import sympy L=[0.04980905361573844, 0.0208207352451072, 0.012368753716465475, 0.009117292529338674, 0.007461219338976698, 0.006510364609693688, 0.005899506135250773, 0.005485130537183343, 0.0051898472561455] Lc=[1.7509008762765992, 0.14986486457338544, 0.03453912303580302, 0.014622269851256788, 0.00831141421008418, 0.005660123321843252, 0.004287823173522503, 0.0034922189865254395, 0.0029879534061896186] beta = 0.25 t=np.linspace(0.00000000000001,0.000001,50) # 外层循环只跑5次,取前5组参数生成5条曲线 for i in range(5): j0 = L[i] j1 = Lc[i] def f(s): return s**(beta - 1)/(j0*s**beta + j1*sympy.gamma(beta + 1)) # 每组参数单独初始化G,避免全局列表持续追加 G = [] for j in range(50): G.append(mp.invertlaplace(f, t[j], method = 'dehoog', dps = 10, degree = 50)) # 单组计算完成后立即绘制,当前G长度为50和t完全匹配 plt.plot(t, G, label=f'参数组{i+1}') plt.legend() plt.xlabel('t') plt.ylabel('G') plt.show()
核心修改点
- 每组参数计算完成后单独绘图,每次绘图的G都是当前组生成的长度为50的列表,维度和t完全匹配
- 限制外层循环仅执行5次,刚好输出5组曲线,符合需求
- 新增图例和坐标轴标签,方便区分不同参数对应的曲线
内容的提问来源于stack exchange,提问作者Ali AlCapone
相关产品推荐
相关产品推荐

