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

Python用matplotlib绘制栅格网格带数值时报ValueError如何解决

错误排查与解决

根因分析

rasterio的read()方法默认返回三维数组,维度结构为(波段数, 栅格高度, 栅格宽度)。你参考的原代码适配二维数组,np.ndenumerate()遍历三维数组时会返回3个索引值(波段索引、行索引、列索引),你代码中仅用(i,j)两个变量接收索引,因此触发解包报错。

修复方案

场景1:使用单波段栅格(绝大多数场景)

读取时指定读取第一个波段,将数组降为二维即可,修改array = data.read()为array = data.read(1),完整修改后代码如下:

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

with rasterio.open("C:/Users/...raster.tif") as data:
    # 指定读取第1个波段,得到二维数组
    array = data.read(1)
  
    fig, ax = plt.subplots()
    ax.matshow(array, cmap='Greens')
    ax.axis('off')
    for (i, j), z in np.ndenumerate(array):
        ax.text(j, i, '{:0.1f}'.format(z), ha='center', va='center')

    fig = plt.gcf()
    plt.savefig("C:/Users/...grid.jpeg")
    plt.close(fig)

场景2:使用多波段栅格

如果需要处理多波段数据,需要按波段单独绘制网格图,遍历时新增波段索引变量接收返回值,示例如下:

with rasterio.open("C:/Users/...raster.tif") as data:
    array = data.read()
    # 遍历每个波段单独绘图
    for band_idx in range(array.shape[0]):
        band_array = array[band_idx]
        fig, ax = plt.subplots()
        ax.matshow(band_array, cmap='Greens')
        ax.axis('off')
        for (i, j), z in np.ndenumerate(band_array):
            ax.text(j, i, '{:0.1f}'.format(z), ha='center', va='center')
        plt.savefig(f"C:/Users/...grid_band{band_idx+1}.jpeg")
        plt.close()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 13:15:02