Desenhando Objetos Planos em Gráficos 3D

Beginner

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

Introdução

Matplotlib é uma popular biblioteca de visualização de dados em Python. Ela oferece uma ampla gama de funções para criar diferentes tipos de gráficos e diagramas. Uma das funcionalidades do Matplotlib é a capacidade de desenhar objetos planos em gráficos 3D. Este laboratório irá guiá-lo através do processo de desenho de objetos planos em gráficos 3D usando Matplotlib.

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 as Bibliotecas Necessárias

Começaremos importando as bibliotecas necessárias, que são Matplotlib, NumPy e mpl_toolkits.mplot3d.art3d.

import matplotlib.pyplot as plt
import numpy as np
import mpl_toolkits.mplot3d.art3d as art3d

Criar um Gráfico 3D

Criaremos um gráfico 3D usando a função add_subplot do Matplotlib. O parâmetro projection é definido como '3d' para criar um gráfico 3D.

fig = plt.figure()
ax = fig.add_subplot(projection='3d')

Desenhar um Círculo na Parede

Desenhar-se-á um círculo na 'parede' x=0 do gráfico 3D usando as funções Circle e pathpatch_2d_to_3d do Matplotlib.

p = Circle((5, 5), 3)
ax.add_patch(p)
art3d.pathpatch_2d_to_3d(p, z=0, zdir="x")

Rotular os Eixos

Rotularemos manualmente os eixos usando a função text3d. A função recebe a posição do texto, o texto a ser exibido, o eixo a ser tratado como a terceira dimensão e outros parâmetros.

def text3d(ax, xyz, s, zdir="z", size=None, angle=0, usetex=False, **kwargs):
    """
    Plots the string *s* on the axes *ax*, with position *xyz*, size *size*,
    and rotation angle *angle*. *zdir* gives the axis which is to be treated as
    the third dimension. *usetex* is a boolean indicating whether the string
    should be run through a LaTeX subprocess or not.  Any additional keyword
    arguments are forwarded to `.transform_path`.

    Note: zdir affects the interpretation of xyz.
    """
    x, y, z = xyz
    if zdir == "y":
        xy1, z1 = (x, z), y
    elif zdir == "x":
        xy1, z1 = (y, z), x
    else:
        xy1, z1 = (x, y), z

    text_path = TextPath((0, 0), s, size=size, usetex=usetex)
    trans = Affine2D().rotate(angle).translate(xy1[0], xy1[1])

    p1 = PathPatch(trans.transform_path(text_path), **kwargs)
    ax.add_patch(p1)
    art3d.pathpatch_2d_to_3d(p1, z=z1, zdir=zdir)


text3d(ax, (4, -2, 0), "Eixo X", zdir="z", size=.5, usetex=False,
       ec="none", fc="k")
text3d(ax, (12, 4, 0), "Eixo Y", zdir="z", size=.5, usetex=False,
       angle=np.pi / 2, ec="none", fc="k")
text3d(ax, (12, 10, 4), "Eixo Z", zdir="y", size=.5, usetex=False,
       angle=np.pi / 2, ec="none", fc="k")

Escrever uma Fórmula Latex no Chão

Escrever-se-á uma fórmula Latex no 'chão' z=0 do gráfico 3D usando a função text3d.

text3d(ax, (1, 5, 0),
       r"$\displaystyle G_{\mu\nu} + \Lambda g_{\mu\nu} = "
       r"\frac{8\pi G}{c^4} T_{\mu\nu}  $",
       zdir="z", size=1, usetex=True,
       ec="none", fc="k")

Definir Limites e Mostrar o Gráfico

Definiremos os limites dos eixos x, y e z usando as funções set_xlim, set_ylim e set_zlim do Matplotlib. Finalmente, mostraremos o gráfico 3D usando a função show do Matplotlib.

ax.set_xlim(0, 10)
ax.set_ylim(0, 10)
ax.set_zlim(0, 10)

plt.show()

Resumo

Neste laboratório, aprendemos como desenhar objetos planos em gráficos 3D usando Matplotlib. Criamos um gráfico 3D, desenhamos um círculo na parede, rotulamos os eixos, escrevemos uma fórmula Latex no chão e definimos os limites dos eixos.