sábado, 18 de julho de 2020

Gráficos de contorno com Matplotlib

Gráficos de contorno com Matplotlib

Com a biblioteca Matplotlib podemos criar gráficos de contorno de uma maneira muita rápida. Um gráfico de contorno pode ser muito útil em algumas áreas, como na engenharia Civil. Na engenharia Civil um gráfico de contorno pode mostrar o contorno de uma construção ou elevação. Já na engenharia Mecânica o mesmo tipo de gráfico pode mostrar um gradiente de tensão na superfície de uma peça.

Método plt.contourf()

Para podermos criar um gráfico de contorno precisaremos necessariamente usar o método contour(). Um exemplo de como chamar o método contour() pode ser visto abaixo:

Exemplo Python

ax.contour(X, Y, Z)

X, Y e Z são matrizes 2D com os seus elementos representando um ponto do gráfico. As arrays X e Y são pontos de coordenadas de x e y. Já a array Z é uma matriz que determinada a altura do contorno. Essa representação é feita num gráfico 2D através de uma cor.
No exemplo abaixo vamos utilizar a função np.meshgrid() para criarmos duas arrays 2D utilizando uma matriz 1D.

Exemplo Python

import numpy as np
import matplotlib.pyplot as plt
# Se estiver usando o Jupyter notebook, inclua:
# %matplotlib inline
        
        
x = np.arange(-3.0, 3.0, 0.1)
y = np.arange(-3.0, 3.0, 0.1)
X, Y = np.meshgrid(x, y)
        
Z = np.sin(X)*np.cos(Y)
        
fig, ax = plt.subplots(figsize=(6, 6))
        
ax.contour(X, Y, Z)
        
plt.show()

Ao executar o código acima você deve ter como resultado um gráfico como esse:

Método plt.contourf()

O método contourf() da biblioteca Matplotlib é semelhante ao método contourf(), a única diferença entre esses dois métodos é que o primeiro método criar um gráfico preenchido e o segundo não. Para chamar o método contourf passamos os mesmos parâmetros que passamos para o método contour. Veja um exemplo abaixo:

Exemplo Python

ax.contourf(X, Y, Z)
    

X e Y são arrays 2D dos pontos x e y, e Z é uma matriz 2D de pontos que determina a cor das áreas no gráfico 2D.
A próxima parte do código cria uma gráfico de contorno sombreada usando o método contourf() da biblioteca Matplotlib.

Exemplo Python

import numpy as np
import matplotlib.pyplot as plt
# se estiver utilizando o Jupyter notebook, use:
# %matplotlib inline
        
        
x = np.arange(-3.0, 3.0, 0.1)
y = np.arange(-3.0, 3.0, 0.1)
        
X, Y = np.meshgrid(x, y)
        
Z = np.sin(X)*np.cos(Y)
        
fig, ax = plt.subplots(figsize=(6,6))
        
ax.contourf(X,Y,Z)
        
plt.show()

Executando esse código o seu gráfico deve estar igual a este:

Barras coloridas no gráfico de contorno

Nos gráfico de contorno utilizamos as cores parar representar uma determinada altura, mas sem saber a qual altura uma cor representar isso não é muito útil. Para resolver esse problema, nos gráficos de contornos, normalmente é adicionada uma barra colorida representando a altura. Essa barra funciona como uma legenda do gráfico.
As barras de cores utilizadas nos gráficos de contorno são adicionadas com o método colorbar(). Por essa barra não pertencer ao gráfico ela precisa ser adicionada. Para fazer isso passamos um gráfico de contorno para o método colorbar(). Assim, toda vez que você precisar adicionar uma barra de cores a um gráfico, um objeto plot precisar estar disponível. E a saída do método contourf() é um objeto plot.
Nos exemplos anteriores, a saída do método contourf() não era atribuída a nenhuma variável. Mas, para adicionar uma barra de cores no nosso gráfico, vamos precisar da saída desse método. Assim podemos passar um objeto plot para o método colorbar().

Exemplo Python

cf = ax.contourf(X,Y,Z)
fig.colorbar(cf, ax = ax)

cf é o objeto plot criado pelo método contourf(). O objeto eixocontém o gráfico de contorno, ax é passado para o método colorbar()junto com o objeto plot.

Executando o exemplo abaixo criamos um gráfico de contorno preenchido com uma barra de cores posicionada ao lado do gráfico.

Exemplo Python

import numpy as np
import matplotlib.pyplot as plt
        
x = np.arange(-3.0, 3.0, 0.1)
y = np.arange(-3.0, 3.0, 0.1)
        
X, Y = np.meshgrid(x, y)
        
Z = np.sin(X)*np.cos(Y)
        
fig, ax = plt.subplots(figsize=(6,6))
        
ax.set_aspect('equal')
cf = ax.contourf(X,Y,Z)
fig.colorbar(cf, ax = ax)
        
plt.show()

Executando código acima o gráfico é esse:

Mapas de cores

O esquema de cores usado nos gráficos de contornos podem ser mudados. O método mais rápido de se fazer isso é usando o método get_cmap() da biblioteca Matplotlib. Na biblioteca Matplotlib existem vários mapas de cores que você pode usar nos seus gráficos. Para ver quais mapas de cores estão disponíveis acesse a documentação da biblioteca (https://matplotlib.org). Já com o mapa de cores precisamos passar esse objeto para o método ou contourf().

Exemplo Python

meu_mapc = plt.get_cmap('gist_earth')
ax.contourf(X, Y, Z, cmap = meu_mapc)

No exemplo abaixo vamos alterar a cor padrão dos gráficos de contorno.

Exemplo Python

import matplotlib.pyplot as plt
import numpy as np
        
x = np.arange(-3.0, 3.0, 0.1)
y = np.arange(-3.0, 3.0, 0.1)
        
X, Y = np.meshgrid(x, y)
        
Z = np.sin(X)*np.cos(Y)
        
fig, ax = plt.subplots(figsize=(6,6))
        
meu_mapc = plt.get_cmap('plasma')
ax.set_aspect('equal')
ax.set_title('Mapa de cores: plasma')
cf = ax.contourf(X,Y,Z, cmap = meu_mapc)
        
fig.colorbar(cf, ax = ax)
        
plt.show()

Executando esse código o seu gráfico deve estar igual a este:

0 comentários:

Postar um comentário