使用Python matplotlib绘制滞回曲线触发ValueError空参数错误咨询
报错根因
- Python中
print()函数的作用是将内容输出到控制台,本身没有返回值,默认返回None。你代码中将print(stress[0:length:10])的结果赋值给Sigma、print(y[0:length:10])的结果赋值给strain,导致这两个变量实际都是空值,传入plt.plot()时就触发了「x、y不能为None」的报错。 - 代码中存在冗余逻辑:先后两次对
length赋值,第一次的len(stress)会被第二次的len(y)直接覆盖,若两个数组长度不一致可能引发索引越界风险。
修复后的代码
import matplotlib.pyplot as plt import numpy as np plt.style.use(['science','no-latex']) # 优化:单次读取所需两列,减少文件读取次数 x, y = np.loadtxt('F:\\I2M\\LCF\\Ep1_camp4_P4_TTH650 06-9-21 11 01 24\\data_1.csv', unpack=True, skiprows=2, usecols=(2,3), delimiter=',') stress = (x*1000)/28.27 # 单位转换为MPa # 取两个数组的最小长度,避免索引越界 length = min(len(stress), len(y)) plt.figure(figsize=(5, 5)) # 先做切片赋值,再单独打印用于调试 Sigma = stress[::10] # 等效于stress[0:length:10] strain = y[::10] # 单独打印调试信息,不影响变量赋值 print(Sigma) print(strain) plt.plot(strain, Sigma, color = 'k') plt.xlabel('应变') plt.ylabel('应力 (MPa)') plt.show()
补充说明
如果绘制的滞回曲线出现线条交叉混乱的情况,可以适当调整切片步长,或者按加载周期拆分数据后逐周期绘制,可视化效果会更好。
内容的提问来源于stack exchange,提问作者user14415287
相关产品推荐
相关产品推荐

