别再死记公式了!用Python+Matplotlib可视化理解吸收率、反射率和透射率

张开发
2026/6/5 9:46:06 15 分钟阅读

分享文章

别再死记公式了!用Python+Matplotlib可视化理解吸收率、反射率和透射率
用Python动态演示光与物质的三种对话方式记得第一次在实验室用分光仪测量玻璃片的透光特性时那些跳动的数字始终无法在我脑中形成直观印象。直到某天用Matplotlib将数据转化成彩色光谱图突然就理解了为什么紫外线会被臭氧层吃掉而可见光能畅通无阻——这就是可视化的魔力。本文将带你用Python重现这个认知跃迁过程把抽象的α、ρ、τ系数变成会讲故事的动态图表。1. 环境配置与基础概念可视化在Jupyter Notebook中先导入我们的光学画笔import numpy as np import matplotlib.pyplot as plt from ipywidgets import interact %matplotlib inline三大光学系数的本质可以比作一场光线派对吸收率(α)是门卫收走的邀请函能量转化为热能反射率(ρ)是被拒之门外的客人能量原路返回透射率(τ)是成功入场的嘉宾能量继续传播用堆叠面积图展示它们的守恒关系wavelengths np.linspace(200, 2500, 100) # 200-2500nm光谱范围 def material_properties(thickness): alpha np.exp(-0.002 * wavelengths * thickness) rho 0.3 * np.sin(wavelengths/500)**2 tau 1 - alpha - rho return alpha, rho, tau alpha, rho, tau material_properties(1) plt.stackplot(wavelengths, alpha, rho, tau, labels[吸收率α, 反射率ρ, 透射率τ]) plt.legend(locupper right) plt.xlabel(波长(nm)); plt.ylabel(比例系数)材质类型典型α峰值波长ρ波动特征τ衰减斜率普通玻璃300nm(UV)0.1线性下降绿叶680nm(红光)0.4-0.6阶梯状黑体材料全波段≈0≈0提示运行interact(material_properties, thickness(0.1, 5))可观察厚度变化时三系数的动态平衡2. 材质光学指纹图谱不同物质就像拥有独特的光学DNA。我们构建一个材质数据库materials { 玻璃: {alpha: lambda w: 0.9*(w350), rho: lambda w: 0.05 0.1*np.sin(w/200)}, 绿叶: {alpha: lambda w: 0.8*np.exp(-(w-550)**2/20000), rho: lambda w: 0.4*np.exp(-(w-750)**2/30000)}, 黑体: {alpha: lambda w: 0.98 0.02*np.random.rand(len(w))}, } def plot_material(name): w wavelengths alpha materials[name][alpha](w) rho materials[name][rho](w) if rho in materials[name] else 0 tau 1 - alpha - rho fig, (ax1, ax2) plt.subplots(1, 2, figsize(12,4)) ax1.stackplot(w, alpha, rho, tau) ax2.plot(w, alpha, r-, labelα) ax2.plot(w, rho, b--, labelρ) ax2.plot(w, tau, g:, labelτ) ax2.legend()观察到的关键现象玻璃在紫外区的突然吸收跃迁绿叶对550nm绿光的反射峰所以呈现绿色黑体近乎完美的全波段吸收3. 基尔霍夫定律的动态验证制作一个温度可调的虚拟黑体辐射源def planck(w, T): h 6.626e-34; c 3e8; k 1.38e-23 return 2*h*c**2 / (w**5 * (np.exp(h*c/(w*k*T)) - 1)) * 1e-9 def kirchhoff_demo(T3000): w wavelengths * 1e-9 # 转为米 emission planck(w, T) absorption materials[黑体][alpha](wavelengths) plt.plot(wavelengths, emission/emission.max(), r-, label发射光谱) plt.plot(wavelengths, absorption, b--, label吸收光谱) plt.legend()通过滑块调节温度时可见吸收曲线与发射曲线始终重合验证αε峰值波长随温度升高向短波移动维恩位移定律4. 能量平衡方程的可视化拆解构建地表辐射收支模型def energy_balance(albedo0.3, T300): solar 1000 * np.exp(-(wavelengths-500)**2/1e5) # 太阳光谱模拟 L planck(wavelengths*1e-9, 280) * 1e12 # 大气长波辐射 absorbed (1-albedo)*solar materials[黑体][alpha](wavelengths)*L emitted 5.67e-8 * T**4 * np.ones_like(wavelengths) net absorbed - emitted plt.stackplot(wavelengths, absorbed, -emitted, labels[吸收能量, 发射能量]) plt.plot(wavelengths, net, k--, label净辐射)关键发现短波吸收主要取决于反照率ρ的全局平均值长波辐射收支对温度变化极其敏感T^4效应植被覆盖通过降低反照率显著影响能量平衡5. 从实验室到真实世界将这些原理应用到卫星遥感图像处理中def ndvi_analysis(red_band, nir_band): red red_band * (1 - materials[绿叶][rho](650)) nir nir_band * (1 - materials[绿叶][alpha](850)) ndvi (nir - red) / (nir red) return plt.imshow(ndvi, cmapYlGn)这里揭示了一个有趣现象植被在近红外的反射率突然升高即吸收率降低这正是NDVI植被指数的工作原理。通过这个案例我们完成了从微观光学参数到宏观地球观测的认知跨越。

更多文章