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

如何基于NumPy数组制作温度分布随时间演化的折线图动画?

实现温度分布随时间演化的动态可视化

针对你的需求——逐帧展示每个时间点的温度分布曲线,每帧停留0.1秒,这里提供两种Matplotlib实现方案,其中FuncAnimation更适配你57601个时间点的大数据量场景。

方法1:用FuncAnimation实现高效动画(推荐)

这种方式仅更新曲线数据而非重绘整个画布,流畅度更高,适合大规模时间序列:

import numpy as np
import matplotlib.pyplot as plt
from matplotlib.animation import FuncAnimation

# 创建示例数据(4个节点,5个时间点)
T1 = np.array([1.1, 1.2, 1.3, 1.4, 1.5])
T2 = T1**2
T3 = T1**3
T4 = T1**4
T = np.stack((T1, T2, T3, T4))
position = np.array([0, 2, 4, 6])
time_points = np.arange(0, 50, 10)  # 对应每个时间点的标签(单位:秒)

# 初始化画布与坐标轴
fig, ax = plt.subplots()
ax.set_xlabel('Position (mm)')
ax.set_ylabel('Temperature (C)')
ax.set_title('Temperature Distribution Over Time')
# 固定坐标轴范围,避免画面跳动(根据真实数据调整上下限)
ax.set_xlim(position.min(), position.max())
ax.set_ylim(T.min() - 0.5, T.max() + 0.5)

# 创建初始曲线和时间标签
line, = ax.plot(position, T[:, 0], marker='o')
time_text = ax.text(0.02, 0.95, '', transform=ax.transAxes)

# 定义每帧更新逻辑
def update(frame):
    # 更新当前时间点的温度曲线
    line.set_ydata(T[:, frame])
    # 更新画面上的时间标签
    time_text.set_text(f'Time: {time_points[frame]}s')
    return line, time_text

# 生成动画:frames是总时间点数,interval是每帧停留毫秒数(0.1秒=100毫秒)
ani = FuncAnimation(fig, update, frames=T.shape[1], interval=100, blit=True)

plt.show()

关键说明

  • blit=True:仅更新画面中变化的部分,大幅提升动画流畅度,尤其适合你的57601帧数据
  • 提前设置xlim和ylim:避免每帧画面因数据范围变化而跳动,需根据真实温度数据的极值调整
  • frames=T.shape[1]:自动遍历所有时间点,无需手动循环

方法2:逐帧清除重绘(适合小数据测试)

如果只是小数据量测试,也可以用这种直观的逐帧重绘方式,但大数据量下性能会打折扣:

import numpy as np
import matplotlib.pyplot as plt
import time

# 创建示例数据
T1 = np.array([1.1, 1.2, 1.3, 1.4, 1.5])
T2 = T1**2
T3 = T1**3
T4 = T1**4
T = np.stack((T1, T2, T3, T4))
position = np.array([0, 2, 4, 6])
time_points = np.arange(0, 50, 10)

fig, ax = plt.subplots()
ax.set_xlim(position.min(), position.max())
ax.set_ylim(T.min() - 0.5, T.max() + 0.5)

for i in range(T.shape[1]):
    ax.clear()
    ax.plot(position, T[:, i], marker='o')
    ax.set_title(f'Temperature at {time_points[i]}s')
    ax.set_xlabel('Position (mm)')
    ax.set_ylabel('Temperature (C)')
    ax.set_xlim(position.min(), position.max())
    ax.set_ylim(T.min() - 0.5, T.max() + 0.5)
    plt.pause(0.1)  # 每帧停留0.1秒
    time.sleep(0)  # 降低CPU占用

plt.show()

适配真实数据的步骤

  1. 替换示例中的T为你形状为(39, 57601)的真实温度数组
  2. 替换position为你的39个节点位置数组
  3. 生成真实时间标签:如果每个时间点间隔为Δt秒,可写time_points = np.arange(0, 57601*Δt, Δt)
  4. 调整ax.set_ylim()的范围,用真实温度数据的最小值和最大值设置,比如ax.set_ylim(T.min() - 1, T.max() + 1)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 15:28:10