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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.03 02:18:14