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

Python中水面动态与速度热图动画异常:热图不随水面形变

动态水面贴合热图实现方案

问题背景

用模拟生成的Hraw和Uraw数据集制作水动画:

  • 二者维度一致,包含x坐标和时间坐标
  • Uraw存储0到水面高度间等距点的水平速度
  • Hraw存储对应速度测量点的y坐标
  • 当前问题:热图无法随水面形状动态适配,y>1区域无颜色,无法贴合水面轮廓

核心问题分析

原实现的热图基于固定y轴范围绘制,未针对每个时刻的水面高度(对应x位置下Hraw的最大y值)做区域裁剪,导致水面以上的空白区域被保留,热图无法跟随水面轮廓变化。

修正后的代码实现

以下是基于Matplotlib的解决方案,核心是每个时刻动态计算水面轮廓,并用网格对齐方式只渲染水面以下的速度区域:

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

# --------------------------
# 替换为你的真实数据集
# 维度要求:Hraw/Uraw为三维数组(时间帧数量, x坐标数量, 每个x的y测量点数)
# x为一维数组,time为一维数组
# --------------------------
x = np.linspace(0, 10, 100)
time = np.linspace(0, 5, 50)
n_t, n_x, n_y = 50, 100, 20  # 时间帧、x点数、每个x的y测量点数

# 模拟符合结构的测试数据(替换成你的Hraw/Uraw)
Hraw = np.zeros((n_t, n_x, n_y))
Uraw = np.zeros((n_t, n_x, n_y))
for t_idx in range(n_t):
    # 模拟波动的水面轮廓
    water_surface = 1 + 0.3*np.sin(x/2 + time[t_idx]*np.pi)
    for x_idx in range(n_x):
        # 生成0到当前水面高度的等距y点
        Hraw[t_idx, x_idx] = np.linspace(0, water_surface[x_idx], n_y)
        # 模拟随y变化的水平速度
        Uraw[t_idx, x_idx] = 0.5*(1 - Hraw[t_idx, x_idx]/water_surface[x_idx])

# 初始化画布
fig, ax = plt.subplots(figsize=(10, 4))
plt.colorbar(ax.pcolormesh(x, Hraw[0], Uraw[0], cmap='coolwarm', shading='auto'), label='水平速度')

# 初始化水面曲线
surface_line, = ax.plot(x, Hraw[0].max(axis=1), color='navy', linewidth=2)

# 坐标轴设置
ax.set_xlabel('X坐标')
ax.set_ylabel('Y坐标')
ax.set_ylim(0, 1.6)  # 预留波动空间,也可改为动态适配
ax.set_title('动态水面与速度热图')

# 帧更新函数
def update(frame):
    # 获取当前帧的y坐标、速度数据
    current_H = Hraw[frame]
    current_U = Uraw[frame]
    # 更新热图数据
    ax.pcolormesh(x, current_H, current_U, cmap='coolwarm', shading='auto')
    # 更新水面曲线
    surface_line.set_ydata(current_H.max(axis=1))
    return surface_line,

# 生成动画
ani = FuncAnimation(fig, update, frames=n_t, interval=60, blit=True)
plt.show()

关键改进点

  • 动态提取水面轮廓:通过current_H.max(axis=1)获取每个x位置的实时水面高度,绘制随时间波动的水面曲线
  • 热图自动贴合水面:利用pcolormesh直接使用每个x对应的y点网格,仅渲染水面以下的有效速度数据,消除空白区域
  • 数据结构对齐:严格匹配Hraw和Uraw的三维结构,确保热图与水面轮廓完全对应

效果说明

修改后,热图会严格贴合每个时刻的水面形状,仅显示水面以下的速度分布,水面曲线随时间动态波动,解决了原实现中热图固定、空白区域无颜色的问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 10:03:27