Python for循环计算电压时Matplotlib绘图空白问题求助
问题根因
- 空白图像问题:当前for循环每次迭代都会覆盖
t和V的值,循环结束后两个变量仅保存最后一个时间步(t≈9.9)对应的单点电压值,ax.plot()仅接收到1组坐标,无法绘制连续曲线,最终输出空白画布。 np.linspace报错问题:np.linspace(start, end, num)接口的第三个参数是采样点总数量,要求必须传入整数,之前的写法大概率是误将步长0.1(浮点数)传给了这个参数,才触发'float' object cannot be interpreted as an integer报错。
实现方案
方案1:numpy向量化实现(推荐,无循环)
不需要逐点遍历,利用numpy的广播机制可以一次性完成所有时间点的电压计算,运行效率更高,也不会出现变量覆盖问题。
注意:数组运算不要用
math模块的函数,math仅支持单个浮点数输入,直接用numpy自带的数学函数即可。
import numpy as np import matplotlib.pyplot as plt # 生成时间序列:两种写法二选一即可 # 写法1:用arange直接指定步长0.1 t = np.arange(0, 10, 0.1) # 写法2:用linspace指定总点数,0-10秒步长0.1共101个点 # t = np.linspace(0, 10, 101) # 批量计算电压 V = np.exp(-0.06 * np.pi * t) * np.sin(2 * t - np.pi) # 绘图 fig, ax = plt.subplots(figsize=(12, 6)) ax.plot(t, V) ax.set_title('Voltage over Time') ax.set_xlabel('Time(s)') ax.set_ylabel('Voltage (V)') plt.show()
方案2:修正for循环写法
如果需要保留逐点计算、逐点打印的逻辑,提前初始化两个列表存储所有时间点和电压值即可,不要用单个变量反复覆盖。
import numpy as np import matplotlib.pyplot as plt import math t_values = [] V_values = [] for t in np.arange(0, 10, 0.1): V = (math.e ** (-0.06 * np.pi * t)) * math.sin(2 * t - np.pi) print(V, 'Volts') t_values.append(t) V_values.append(V) fig, ax = plt.subplots(figsize=(12, 6)) ax.plot(t_values, V_values) ax.set_title('Voltage over Time') ax.set_xlabel('Time(s)') ax.set_ylabel('Voltage (V)') plt.show()
内容的提问来源于stack exchange,提问作者swill92
相关产品推荐
相关产品推荐

