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

如何在Matplotlib中叠加两张图像并使用不同colormap?

在Matplotlib中叠加双图层并设置不同色阶(Colormap)

要实现科学论文中常见的双图叠加效果(比如海拔+起火时间),核心是通过两次imshow调用分别绘制图层,配合透明度和自定义色阶来实现。以下是具体实现步骤和代码示例:

核心步骤

  • 用imshow绘制底层基础数据(如海拔),选择灰色系色阶
  • 再次调用imshow绘制上层目标数据(如起火时间),选择橙色系色阶,并设置合适的透明度alpha
  • 为两个图层分别添加色条,确保图例清晰

完整代码示例

import matplotlib.pyplot as plt
import numpy as np

# 1. 生成模拟数据(替换为你的真实数据)
# 海拔数据:100x100网格,范围0-2000米
elevation = np.random.randint(0, 2000, size=(100, 100))
# 起火时间数据:仅30%区域有值,范围1-24小时,空值用NaN填充
fire_time = np.full_like(elevation, np.nan)
fire_mask = np.random.rand(100, 100) > 0.7
fire_time[fire_mask] = np.random.randint(1, 24, size=fire_mask.sum())

# 2. 创建画布和轴对象
fig, ax = plt.subplots(figsize=(8, 6))

# 3. 绘制底层海拔图(灰色系色阶)
im_elev = ax.imshow(elevation, cmap='Greys', extent=[0, 100, 0, 100])

# 4. 绘制上层起火时间图(橙色系色阶,设置透明度)
im_fire = ax.imshow(fire_time, cmap='Oranges', alpha=0.6, 
                    extent=[0, 100, 0, 100], vmin=1, vmax=24)

# 5. 添加色条并设置标签
# 海拔色条
cbar_elev = plt.colorbar(im_elev, ax=ax, fraction=0.046, pad=0.04)
cbar_elev.set_label('海拔 (m)')

# 起火时间色条
cbar_fire = plt.colorbar(im_fire, ax=ax, fraction=0.046, pad=0.04)
cbar_fire.set_label('起火时间 (小时)')

# 6. 调整布局并显示
plt.tight_layout()
plt.show()

关键细节说明

  • 透明度调整:alpha参数建议设置在0.4-0.8之间,既能保留底层数据的可见性,又能突出上层数据
  • 色阶选择:灰色系可选Greys、gray,橙色系可选Oranges、OrRd;如果需要自定义色阶,可使用matplotlib.colors.LinearSegmentedColormap
  • 数据对齐:确保两个图层的extent(坐标范围)完全一致,避免图层错位;如果使用地理坐标,可配合地理绘图库处理
  • 空值处理:用np.nan填充上层数据的空值区域,imshow会自动跳过这些区域,让底层数据自然透出

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 17:57:25