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

求助:使用Matplotlib绘制二维颜色图及构造计算数组

解决Matplotlib绘制二维颜色图的问题

问题分析

你的代码已正确构造二维网格并通过循环计算得到Removal_fraction数组,核心逻辑可行,只需添加Matplotlib绘图代码即可生成目标颜色图。

完整代码实现

import numpy as np
import matplotlib.pyplot as plt
import CoolProp.CoolProp as cp  # 确保已安装并导入CoolProp

def removal_fraction(P_inlet,T_inlet,P_tank):
    # 闪蒸罐压力为P_tank,单位Pa(a)
    H_inlet=cp.PropsSI('H',"P",P_inlet,"T",T_inlet,"water") # 入口流体焓值,J/kg
    H_sensible_tank=cp.PropsSI('H',"P",P_tank,"Q",0,"water") # 罐内饱和液体焓值,J/kg
    
    Latent_heat_transferred=H_inlet-H_sensible_tank # 用于汽化的热量,J/kg
    H_latent_tank=cp.PropsSI('H',"P",P_tank,"Q",1,"water")-cp.PropsSI('H',"P",P_tank,"Q",0,"water") # 汽化潜热,J/kg
    
    # 处理物理上不合理的负蒸发率
    R_water_evap=np.maximum(Latent_heat_transferred/H_latent_tank, 0)
    return R_water_evap

P_inlet=np.linspace(200000,100000*40,500) # 入口压力,Pa(a)
T_inlet=np.linspace(90+273.15,200+273.15,500) # 入口温度,K
P_tank=(14.7-10)*6894.76 # 闪蒸罐压力,Pa(a)

# 创建二维网格
P_inlet_vals,T_inlet_vals=np.meshgrid(P_inlet,T_inlet,indexing='ij')
Removal_fraction=np.zeros(P_inlet_vals.shape)

# 逐点计算蒸发率
for i in range(len(P_inlet)):
    for j in range(len(T_inlet)):
        Removal_fraction[i,j]=removal_fraction(P_inlet_vals[i,j],T_inlet_vals[i,j],P_tank)

# ---------------------- 绘制二维颜色图 ----------------------
plt.figure(figsize=(10, 8))

# 使用pcolormesh绘制颜色网格(也可替换为contourf绘制填充等高线)
im = plt.pcolormesh(
    P_inlet/1000,  # 转换为kPa,提升可读性
    T_inlet-273.15,  # 转换为℃,符合工程习惯
    Removal_fraction.T,  # 转置数组适配Matplotlib的xy索引逻辑
    cmap='viridis',
    shading='auto'
)

# 添加颜色条并标注含义
plt.colorbar(im, label='Water Evaporation Fraction (kg/kg)')

# 设置坐标轴与标题
plt.xlabel('Inlet Pressure (kPa)')
plt.ylabel('Inlet Temperature (℃)')
plt.title('Water Evaporation Fraction vs Inlet Pressure & Temperature')

plt.tight_layout()
plt.show()

关键细节说明

  • 数组转置:因创建网格时用了indexing='ij',Removal_fraction形状为(压力点数, 温度点数),而Matplotlib默认按(温度点数, 压力点数)渲染,需用.T转置数组才能正确对应坐标轴。
  • 单位转换:将Pa转为kPa、K转为℃,让图表更直观易读。
  • 异常值处理:用np.maximum限制蒸发率≥0,避免出现物理上不合理的负数值。
  • 循环优化(可选):若嫌双层循环代码繁琐,可改用np.vectorize包装函数,底层仍为循环但代码更简洁:
    vec_removal = np.vectorize(removal_fraction)
    Removal_fraction = vec_removal(P_inlet_vals, T_inlet_vals, P_tank)
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 16:55:28