Matplotlib é uma biblioteca Python de plotagem gráfica 2D. Matplotlib permite produzir gráficos de qualidade em diversos formatos e em ambientes interativos em várias plataformas.
Essa guia traz exemplos e os principais comandos utilizados no Matplotlib, de modo que serve de referência rápida para plotar gráficos e visualizar dados.
Anatomia e fluxo geral para plotar gráficos
Fluxo
O procedimento básico para plotar gráficos com Matplotlib segue os seguintes passos:
- Preparando os dados
- Criando os gráficos
- Rotinas de plotagem
- Customizando
- Salvando
- Exibindo
>>> import matplotlib.pyplot as plt >>> x = [1,2,3,4] #Passo 1 >>> y = [10,20,25,30] >>> fig = plt.figure() #Passo 2 >>> ax = fig.addsubplot(111) #Passo 3 >>> ax.plot(x, y, color='lightblue', linewidth=3) #Passo 4 >>> ax.scatter([2,4,6], [5,15,25], color='darkgreen', marker='^') >>> ax.set_xlim(1, 6.5) >>> plt.savefig('foo.png') #Passo 5 >>> plt.show() #Passo 6
Anatomia de uma figura
A imagem abaixo mostra os componentes de uma figura utilizando-se Matplotlib.
1. Preparando os dados
Dados 1D
>>> import numpy as np >>> x = np.linspace(0, 10, 100) >>> y = np.cos(x) >>> z = np.sin(x)
Imagens ou dados 2D
>>> data = 2 * np.random.random((10, 10))
>>> data2 = 3 * np.random.random((10, 10))
>>> Y, X = np.mgrid[-3:3:100j, -3:3:100j]
>>> U = -1 - X**2 + Y
>>> V = 1 + X - Y**2
>>> from matplotlib.cbook import get_sample_data
>>> img = np.load(get_sample_data('aexs_grid/bivarate_normal.py'))
2. Criando o gráfico
>>> import matplotlib.pyplot as plt
Figura
>>> fig = plt.figure() >>> fig2 =plt.figure(figsize=plt.figaspect(2.0))
Eixos
Todo gráfico é montado em relação a um Eixo. Em geral, um subgráfico é suficiente. Um subgráfico é um eixo num sistema de grades.
>>> fig.add_axes() >>> ax1 = fig.add_subplot(221) # linha-coluna-número >>> ax3 = fig.add_subplot(212) >>> fig3, axes = plt.subplots(nrows = 2, ncols = 2) >>> fig4, axes2 = plt.subplots(ncols = 3)
3. Rotinas de plotagem
Dados 1D
>>> fig, ax = plt.subplots() # Plota pontos conectados por linhas e marcadores >>> lines = ax.plot(x, y) # Plota pontos desconectados, em escala ou coloridos >>> ax.scatter(x, y) # Plota retângulos verticais (comprimento constante) >>> axes[0,0].bar([1,2,3], [3,4,5]) # Plota retângulos horizontais (altura constante) >>> axes[1,0].barh([0.5,1,2.5], [0,1,2]) # Plota uma linha horizontal através dos eixos >>> axes[1,1].axhline(0.45) # Plota uma linha vertical através dos eixos >>> axes[0,1].axvline(0.65) # Plota polígonos preenchidos >>> ax.fill(x, y, color='blue') # Preenche entre valores-y e 0 >>> ax.fill_between(x, y, color='yellow')
Dados ou imagens 2D
>>> fig, ax = plt.subplots() # Matrizes RGB mapa-coloriradas >>> im = ax.imshow(img, cmp='gist earth', interpolation='nearest', vmin=-2, vmax=2) # Plotagem pseudo-colorida de matriz 2D >>> axes2[0].pcolor(data2) >>>axes2[0].pcolormesh(data) # Contornos da plotgem >>> CS - plt.contour(Y, X, U) # Contornos da plotgem preenchida >>> axes2[2].countourf(data1) # Rotula um contorno de plotagem >>>axes2[2] = ax.clabel(CS)
Campos vetoriais
# Adiciona uma flecha ao eixo >>> axes[0,1].arrow(0,0,0.5,0.5 # Plota um campo 2D de flechas >>> axes[0,1].quiver(y,z) >>> axes[0,1].streamplot(X, Y, U, V)
Distribuições
# Plota um histograma >>> ax1.hist(y) # Cria uma caixa e uma plotagem whisker >>> ax3.boxplot(y) # Cria uma plotagem violino >>> ax3.violinplot(z)
4. Customizando
Cores, barras coloridas e mapas coloridos
>>> plt.plot(x, x, x, x**2, x, x**3) >>> ax.plot(x, y, alpha=0.4) >>> ax.plot(x, y, c='k') >>> fig.colorbar(im, orientation='horizontal') >>> im = ax.imshow(img, cmap='seismic')
Marcadores
>>> fig, ax = plt.subplots() >>> ax.scatter(x, y, marker=".") >>> ax.plotx, y, marker="o")
Estilos de linhas
>>> plt.plot(x, y, linewidht=4.0) >>> plt.plot(x, y, ls='solid') >>> plt.plot(x, y, ls='--') >>> plt.plot(x, y, '--', x**2, y**2, '-.') >>> plt.setp(lines, color='r', linewidht=4.0)
Texto e anotações
>>> ax.text(1, -2.1, 'Gráfico de exemplo', style='italic') >>> ax.annotate("Sine", xy=(8, 0), xycoords='data', xytext=(10.5, 0), textcoords='data', arrowprops = dict(arrowstyle="-.", connectionstyle="arc3"),)
Texto matemático
>>> plt.title(r'$sigma_i = 15$', fontsize=20)
Limites, legendas e leioutes
Limites e auto-escala
# Adiciona preenchimento a uma plotagem >>> ax.margins(x=0.0, y=0.1) # Define o aspecto da razão da plotagem como 1 >>> ax.axis('equal') # Define os limites dos eixos x e y >>> ax.(xlim=[0,10.5], ylim=[-1.5,1.5]) # Define os limites do eixo x >>> ax.set_xlim(0, 10.5)
Legendas
# Define o título e os rótulos dos eixos x e y >>> ax.set(title='Eixo de exemplo', ylabel='Eixo-Y', xlabel='Eixo-X') # Não permite sobreposição entre os elementos da plotagem >>> ax.legend(loc='best')
Tiques
# Define manualmente os tiques de x >>> ax.xaxies.set(ticks=range(1,5), ticklabels=[3,100,-12,'foo']) # Faz os tiques de y mais longos e saindo e entrando >>> ax.tick_params(axis='y', direction='inout', length=10)
Espaçamento do sub-gráfico
# Ajusta o espaço entre subgráficos >>> fig3.subplots_adjust(wspace=0.5, hspace=0.3, left=0.125, right=0.9, top=0.9, bottom=0.1) # Encaixa o sugráfico na área da figura >>> fig.tight_layout()
Coluna dos eixos (spines)
# Torna invisível a linha superior do eixo >>> ax1.spines['top'].set_visible(False) # Move para fora a linha inferior do eixo >>> ax1.spines['bottom'].set_position(('outward',10))
5. Salvando
Salvando figuras
>>> plt.savefig('foo.png')
Salvando figuras transparentes
>>> plt.savefig('foo.png', transparent=True)
6. Exibindo
>>> plt.show()
Fechando e limpando
#Limpa um eixo >>> plt.cla() #Limpa a figura inteira >>> plt.clf() #Fecha uma janela >>> plt.close()
Veja também:
- Guia básico para plotar gráficos usando o matplotlib do Python
- Guia básico para plotar gráficos usando o matplotlib do Python parte 2
- Biblioteca Seaborn com o matplotlib