Python如何将三张图像绘制在同一画布实现分区展示的前后对比效果
实现方案说明
完全可以通过数组切片拼接、叠加绘制两种方式实现你要的分区可视化效果,两种方案的实现逻辑和适用场景如下:
方案1:数组切片后拼接
适合需要输出完整拼接后数组的场景,操作逻辑简单直观。
假设你有三个尺寸完全相同的二维数组arr1、arr2、arr3,尺寸均为H行 × W列,按横向三等分拼接的示例代码如下:
import numpy as np import matplotlib.pyplot as plt W = arr1.shape[1] split_width = W // 3 # 分别取三个数组对应的分区切片 part1 = arr1[:, :split_width] part2 = arr2[:, split_width:2*split_width] part3 = arr3[:, 2*split_width:] # 沿宽度方向拼接三个切片 combined_arr = np.concatenate([part1, part2, part3], axis=1) # 直接可视化拼接后的数组即可 plt.imshow(combined_arr) plt.show()
如果是纵向分区、或自定义不规则分区,只需要调整切片的索引范围即可,逻辑通用。如果处理的是RGB这类三维数组,只要保留最后一个通道维度,切片逻辑完全一致。
方案2:分区叠加绘制
适合不需要保留拼接后数组、仅需要输出可视化结果的场景,调整更灵活。
不用修改原始数组,直接在同一个绘图画布上指定每个数组的绘制区域即可,以matplotlib为例:
import matplotlib.pyplot as plt H, W = arr1.shape split_width = W // 3 fig, ax = plt.subplots() # 依次绘制每个数组的对应区域,指定显示范围 ax.imshow(arr1, extent=(0, split_width, 0, H), clip_on=True) ax.imshow(arr2, extent=(split_width, 2*split_width, 0, H), clip_on=True) ax.imshow(arr3, extent=(2*split_width, W, 0, H), clip_on=True) # 调整坐标轴范围保证显示完整 ax.set_xlim(0, W) ax.set_ylim(0, H) plt.show()
这种方案后续调整分区比例、给不同分区加独立样式/标注时,不用重新处理原始数组,直接修改绘制参数即可。
内容的提问来源于stack exchange,提问作者Coolcrab
相关产品推荐
相关产品推荐

