Introdução
Matplotlib é uma biblioteca poderosa para criar visualizações em Python. Às vezes, ao criar gráficos, pode ser necessário ajustar os parâmetros dos subplots manualmente. Este laboratório mostrará como ajustar programaticamente os parâmetros dos subplots com base no tamanho dos rótulos.
Dicas da VM
Após a inicialização da VM, clique no canto superior esquerdo para mudar para a aba Notebook para 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 às limitações do 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 as bibliotecas necessárias
Precisaremos de matplotlib.pyplot e matplotlib.transforms para criar o gráfico e manipular os parâmetros dos subplots.
import matplotlib.pyplot as plt
import matplotlib.transforms as mtransforms
Criar o gráfico
Vamos criar um gráfico de linha simples com alguns rótulos y longos.
fig, ax = plt.subplots()
ax.plot(range(10))
ax.set_yticks([2, 5, 7], labels=['really, really, really', 'long', 'labels'])
Definir a função de retorno de chamada (callback) de desenho
Vamos definir uma função que será chamada toda vez que o gráfico for desenhado. Esta função calculará as caixas delimitadoras (bounding boxes) dos rótulos y, determinará se o subplot deixa espaço suficiente para os rótulos e ajustará os parâmetros do subplot, se necessário.
def on_draw(event):
bboxes = []
for label in ax.get_yticklabels():
## Bounding box in pixels
bbox_px = label.get_window_extent()
## Transform to relative figure coordinates. This is the inverse of
## transFigure.
bbox_fig = bbox_px.transformed(fig.transFigure.inverted())
bboxes.append(bbox_fig)
## the bbox that bounds all the bboxes, again in relative figure coords
bbox = mtransforms.Bbox.union(bboxes)
if fig.subplotpars.left < bbox.width:
## Move the subplot left edge more to the right
fig.subplots_adjust(left=1.1*bbox.width) ## pad a little
fig.canvas.draw()
Conectar o evento de desenho à função de retorno de chamada
Precisamos conectar o draw_event à nossa função on_draw.
fig.canvas.mpl_connect('draw_event', on_draw)
Mostrar o gráfico
Finalmente, mostraremos o gráfico.
plt.show()
Resumo
Neste laboratório, aprendemos como ajustar programaticamente os parâmetros dos subplots com base no tamanho dos rótulos. Usamos o módulo matplotlib.transforms para calcular as bounding boxes (caixas delimitadoras) dos rótulos e o draw_event para chamar nossa função on_draw.