Criar Grade de Imagens com Matplotlib

Beginner

This tutorial is from open-source community. Access the source code

Introdução

Este tutorial demonstrará como criar uma grade de imagens usando ImageGrid do Matplotlib. Criaremos uma grade de imagens 2x2 e exploraremos várias maneiras de adicionar barras de cores à grade.

Dicas para a VM

Após a inicialização da VM, clique no canto superior esquerdo para mudar para a aba Notebook e acessar o Jupyter Notebook para praticar.

Às vezes, pode ser necessário aguardar alguns segundos para que o Jupyter Notebook termine de carregar. A validação das operações não pode ser automatizada devido a limitações no Jupyter Notebook.

Se você enfrentar problemas durante o aprendizado, sinta-se à vontade para perguntar ao Labby. Forneça feedback após a sessão, e resolveremos o problema prontamente para você.

Importar bibliotecas e dados necessários

Primeiramente, precisamos importar as bibliotecas e os dados necessários para criar nossa grade. Usaremos matplotlib.pyplot para plotagem, cbook para obter um conjunto de dados de exemplo e ImageGrid para criar nossa grade.

import matplotlib.pyplot as plt
from matplotlib import cbook
from mpl_toolkits.axes_grid1 import ImageGrid

## Get sample data
Z = cbook.get_sample_data("axes_grid/bivariate_normal.npy")  ## 15x15 array
extent = (-3, 4, -4, 3)

Criar uma grade de imagens 2x2 com uma única barra de cores

Nossa primeira grade será uma grade de imagens 2x2 com uma única barra de cores. Usaremos a função ImageGrid para criar a grade e especificar o número de linhas e colunas que desejamos. Também especificaremos a localização da barra de cores e definiremos share_all como True para compartilhar a barra de cores em todas as imagens.

## Create a grid of 2x2 images with a single colorbar
grid = ImageGrid(
    fig,  ## Figure object
    141,  ## Location of subplot
    nrows_ncols=(2, 2),  ## Number of rows and columns
    axes_pad=0.0,  ## Padding between axes
    label_mode="L",  ## Label mode
    share_all=True,  ## Share colorbar across all images
    cbar_location="top",  ## Location of colorbar
    cbar_mode="single"  ## Colorbar mode
)

## Plot images on grid
for ax in grid:
    im = ax.imshow(Z, extent=extent)

## Add colorbar to grid
grid.cbar_axes[0].colorbar(im)
for cax in grid.cbar_axes:
    cax.tick_params(labeltop=False)

Criar uma grade de imagens 2x2 com cada imagem tendo sua própria barra de cores

Nossa próxima grade será uma grade de imagens 2x2 com cada imagem tendo sua própria barra de cores. Usaremos a função ImageGrid novamente, mas desta vez definiremos cbar_mode como "each" para especificar que cada imagem deve ter sua própria barra de cores.

## Create a grid of 2x2 images with each image having its own colorbar
grid = ImageGrid(
    fig,  ## Figure object
    142,  ## Location of subplot
    nrows_ncols=(2, 2),  ## Number of rows and columns
    axes_pad=0.1,  ## Padding between axes
    label_mode="1",  ## Label mode
    share_all=True,  ## Share colorbar across all images
    cbar_location="top",  ## Location of colorbar
    cbar_mode="each",  ## Colorbar mode
    cbar_size="7%",  ## Size of colorbar
    cbar_pad="2%"  ## Padding between colorbar and images
)

## Plot images on grid and add colorbars
for ax, cax in zip(grid, grid.cbar_axes):
    im = ax.imshow(Z, extent=extent)
    cax.colorbar(im)
    cax.tick_params(labeltop=False)

Criar uma grade de imagens 2x2 com cada imagem tendo sua própria barra de cores e uma faixa de cores diferente

Nossa grade final também será uma grade de imagens 2x2 com cada imagem tendo sua própria barra de cores, mas desta vez usaremos uma faixa de cores diferente para cada imagem. Definiremos a faixa de cores usando vmin e vmax ao plotar cada imagem.

## Create a grid of 2x2 images with each image having its own colorbar and a different colorbar range
grid = ImageGrid(
    fig,  ## Figure object
    143,  ## Location of subplot
    nrows_ncols=(2, 2),  ## Number of rows and columns
    axes_pad=(0.45, 0.15),  ## Padding between axes
    label_mode="1",  ## Label mode
    share_all=True,  ## Share colorbar across all images
    cbar_location="right",  ## Location of colorbar
    cbar_mode="each",  ## Colorbar mode
    cbar_size="7%",  ## Size of colorbar
    cbar_pad="2%"  ## Padding between colorbar and images
)

## Plot images on grid and add colorbars
limits = ((0, 1), (-2, 2), (-1.7, 1.4), (-1.5, 1))  ## Different colorbar ranges
for ax, cax, vlim in zip(grid, grid.cbar_axes, limits):
    im = ax.imshow(Z, extent=extent, vmin=vlim[0], vmax=vlim[1])
    cb = cax.colorbar(im)
    cb.set_ticks((vlim[0], vlim[1]))

Resumo

Neste tutorial, aprendemos como criar uma grade de imagens usando ImageGrid do Matplotlib. Exploramos diferentes maneiras de adicionar barras de cores à grade, incluindo o uso de uma única barra de cores para todas as imagens, dando a cada imagem sua própria barra de cores e dando a cada imagem sua própria barra de cores com uma faixa de cores diferente.