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

如何获取多个pcolormesh生成的拼接组合数组?

解决方案

方法1:生成数据时直接拼接(最推荐,性能最高,不易出错)

不需要事后从pcolormesh对象里捞数据,直接在生成每个5x5随机数组的时候就写入预先初始化的大数组即可,代码修改如下:

import matplotlib.pyplot as plt
import numpy as np

# 预先定义拼接参数
block_size = 5
h_blocks = 2 # ih循环次数,y方向块数
w_blocks = 5 # iw循环次数,x方向块数
# 初始化最终的大数组,维度对应[总y方向长度, 总x方向长度] = [2*5,5*5] = 10x25,需要25x10直接转置即可
full_arr = np.zeros((h_blocks * block_size, w_blocks * block_size))

def add_randam_data(ax, h, w):
    D = np.random.uniform(0, 100, size=(block_size, block_size))
    mesh = ax.pcolormesh(np.arange(D.shape[0]+1)+w*D.shape[0], np.arange(D.shape[1]+1)+h*D.shape[1], D)
    # 把当前块写入大数组对应位置
    full_arr[h*block_size : (h+1)*block_size, w*block_size : (w+1)*block_size] = D
    return mesh

fig, ax = plt.subplots(1,1, figsize=(10, 5))
for ih in range(0,h_blocks):
    for iw in range(0,w_blocks):
        mesh = add_randam_data(ax,ih,iw)

plt.show()

# 保存数组
# 存为二进制npy格式(方便后续python读取)
np.save("full_arr.npy", full_arr)
# 存为文本csv格式
np.savetxt("full_arr.csv", full_arr, delimiter=",")
# 需要25x10格式的话替换为 full_arr.T 保存即可

方法2:从已绘制的pcolormesh对象中提取拼接

如果无法修改前面的绘图代码,也可以从axes的collections属性中遍历所有pcolormesh对象,提取数据后按坐标位置拼接:

# 放在plt.show()之前执行即可
block_size = 5
h_blocks = 2
w_blocks = 5
full_arr = np.zeros((h_blocks * block_size, w_blocks * block_size))

# 遍历所有pcolormesh对象
for mesh in ax.collections:
    # 获取当前mesh的坐标范围
    x0, x1, y0, y1 = mesh.get_extent()
    # 计算当前块的位置索引
    h_idx = int(y0 // block_size)
    w_idx = int(x0 // block_size)
    # 提取当前块数据,注意get_array返回的是扁平化数组,需要reshape回原尺寸
    block_data = mesh.get_array().reshape(block_size, block_size)
    # 写入大数组
    full_arr[h_idx*block_size : (h_idx+1)*block_size, w_idx*block_size : (w_idx+1)*block_size] = block_data

# 后续保存逻辑和方法1一致

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 03:15:03