Introdução
Este tutorial irá guiá-lo sobre como criar um efeito de zoom usando matplotlib. O efeito de zoom permitirá que você conecte e amplie em dois eixos diferentes.
Dicas para a VM (Máquina Virtual)
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ê.
Importando as Bibliotecas Necessárias
Nesta etapa, importaremos as bibliotecas necessárias para este tutorial. Importaremos matplotlib e as bibliotecas relevantes de mpl_toolkits.axes_grid1.
import matplotlib.pyplot as plt
from matplotlib.transforms import (Bbox, TransformedBbox,
blended_transform_factory)
from mpl_toolkits.axes_grid1.inset_locator import (BboxConnector,
BboxConnectorPatch,
BboxPatch)
Definindo a Conexão Entre os Eixos
Nesta etapa, definiremos a conexão entre os dois eixos. Esta função recebe dois eixos como entradas, bem como os valores mínimo e máximo para o eixo x. Em seguida, ela cria uma caixa delimitadora (bounding box) e conecta os dois eixos.
def zoom_effect01(ax1, ax2, xmin, xmax, **kwargs):
bbox = Bbox.from_extents(xmin, 0, xmax, 1)
mybbox1 = TransformedBbox(bbox, ax1.get_xaxis_transform())
mybbox2 = TransformedBbox(bbox, ax2.get_xaxis_transform())
prop_patches = {**kwargs, "ec": "none", "alpha": 0.2}
c1, c2, bbox_patch1, bbox_patch2, p = connect_bbox(
mybbox1, mybbox2,
loc1a=3, loc2a=2, loc1b=4, loc2b=1,
prop_lines=kwargs, prop_patches=prop_patches)
ax1.add_patch(bbox_patch1)
ax2.add_patch(bbox_patch2)
ax2.add_patch(c1)
ax2.add_patch(c2)
ax2.add_patch(p)
return c1, c2, bbox_patch1, bbox_patch2, p
Criando o Segundo Eixo Zoomado
Nesta etapa, criaremos o segundo eixo zoomado. Esta função recebe dois eixos como entradas. Em seguida, ela cria uma caixa delimitadora (bounding box) para o segundo eixo e o conecta ao primeiro eixo.
def zoom_effect02(ax1, ax2, **kwargs):
tt = ax1.transScale + (ax1.transLimits + ax2.transAxes)
trans = blended_transform_factory(ax2.transData, tt)
mybbox1 = ax1.bbox
mybbox2 = TransformedBbox(ax1.viewLim, trans)
prop_patches = {**kwargs, "ec": "none", "alpha": 0.2}
c1, c2, bbox_patch1, bbox_patch2, p = connect_bbox(
mybbox1, mybbox2,
loc1a=3, loc2a=2, loc1b=4, loc2b=1,
prop_lines=kwargs, prop_patches=prop_patches)
ax1.add_patch(bbox_patch1)
ax2.add_patch(bbox_patch2)
ax2.add_patch(c1)
ax2.add_patch(c2)
ax2.add_patch(p)
return c1, c2, bbox_patch1, bbox_patch2, p
Conectando os Eixos
Nesta etapa, conectaremos os eixos e criaremos o efeito de zoom. Criaremos uma figura com quatro eixos e os conectaremos usando as funções zoom_effect01 e zoom_effect02.
axs = plt.figure().subplot_mosaic([
["zoom1", "zoom2"],
["main", "main"],
])
axs["main"].set(xlim=(0, 5))
zoom_effect01(axs["zoom1"], axs["main"], 0.2, 0.8)
axs["zoom2"].set(xlim=(2, 3))
zoom_effect02(axs["zoom2"], axs["main"])
plt.show()
Resumo
Neste tutorial, aprendemos como criar um efeito de zoom usando matplotlib. Primeiro, definimos uma função para conectar os eixos e, em seguida, criamos uma segunda função para criar o segundo eixo zoomado. Finalmente, conectamos os eixos e criamos o efeito de zoom.