O Matplotlib oferece um conjunto variado de formatos de plotagem de gráficos:
Importe o módulo gráfico de visualização de dados Pyplot como plt:
import matplotlib as mpl
import matplotlib.pyplot as plt
Existem elementos comuns aos diferentes formatos de plotagem, que podem ser personalizados: tipo de plotagem; uso de eixos, grade, título e rótulos; cores; estilos etc.
Também existem elementos específicos de cada formato.
O módulo matplotlib.pyplot contém diferentes métodos para plotagem de gráficos.
Alguns dos principais métodos do módulo são:
Para confecção dos gráficos definiremos valores padrões para os elementos comuns.
mpl.rcParams['figure.figsize'] = [12,9]
mpl.rcParams['figure.dpi'] = 80
mpl.rcParams['figure.titlesize'] = 32
mpl.rcParams['axes.titlesize'] = 24
mpl.rcParams['axes.labelsize'] = 16
mpl.rcParams['axes.xmargin'] = 0.01
mpl.rcParams['axes.ymargin'] = 0.01
mpl.rcParams['xtick.labelsize'] = 16
mpl.rcParams['ytick.labelsize'] = 16
mpl.rcParams["figure.subplot.left"] = 0.1
mpl.rcParams["figure.subplot.bottom"] = 0.07
mpl.rcParams["figure.subplot.right"] = 0.97
mpl.rcParams["figure.subplot.top"] = 0.9
mpl.rcParams['font.size'] = 24
mpl.rcParams['savefig.dpi'] = 100
A maneira mais simples de criar um gráfico com o matplotlib.pyploté usando o método plot().
Exemplo: plote um gráfico com os valores do eixo x sendo gerados com o método Numpy np.linspace(), e os valores do eixo y sendo gerados como variáveis dependentes (função) dos valores de x.
A função np.linspace() retorna números espaçados uniformemente dentro de um intervalo especificado, recebendo três argumentos: o primeiro e o último valor do intervalo, e o número de valores a serem gerados.
import matplotlib.pyplot as plt
import numpy as np
x = np.linspace(0,50,100)
y = x * np.linspace(100,150,100)
plt.plot(x,y)
plt.show()
O enredo básico possui poucos elementos, vamos entendê-los melhor, adicionando elementos diferentes para o enredo, visando proporcionar novos efeitos que permitam uma melhor interpretação das informações representadas no gráfico.
Os elementos que podem ser adicionados ao gráfico incluem título, rótulo de x, rótulo de y, limites de x, limites de y, entre outros.
Exemplo: defina elementos diferentes para o gráfico.
import numpy as np
import matplotlib.pyplot as plt
x = np.linspace(0,50,100)
y = x * np.linspace(100,200,100)
plt.plot(x,y)
plt.title("Plot Básico")
plt.xlabel("Coordenadas x")
plt.ylabel("Coordenadas y")
plt.xlim(0,60)
plt.ylim(0,15000)
plt.show()
Podemos adicionar elementos ao gráfico, como cor, marcadores, personalização de linha.
Exemplo: gráfico de linha com cor, estilo tracejado de linha e com largura da linha de 8 pixels.
import matplotlib.pyplot as plt
import numpy as np
x = np.linspace(0,50,100)
y = x * np.linspace(100,200,100)
plt.plot(x, y, c = 'r', linestyle = '--', linewidth = 8)
plt.show()
Exemplo: plote o gráfico com o marcador "*" da circunferência com tamanho 10 e cor verde.
import matplotlib.pyplot as plt
import numpy as np
x = np.linspace(0,50,20)
y = x * np.linspace(100,200,20)
plt.plot(x, y, marker='*', markersize=30, c="g")
plt.show()
exemplo: adicione a grade usando o método grid().
import matplotlib.pyplot as plt
import numpy as np
x = np.linspace(0,50,20)
y = x * np.linspace(100,200,20)
plt.plot (x, y, marker='*', markersize=30, c="g")
plt.grid(True)
plt.legend()
plt.show()
As plotagens têm 3 características para personalização: linhas, marcadores e cores.
As linhas podem ser sólidas, pontilhadas, tracejadas ou tracejadas/pontilhadas.
Cores são representadas por nomes, letras, formatos hexadecimais ou valor RGB.
Os marcadores podem ter estilo de círculo, estrela, triângulo, traço, cruz etc.
Pode haver algumas situações em que o usuário pode ter que mostrar vários gráficos em uma única figura para fins de comparação.
Por exemplo, um varejista deseja saber a tendência de vendas de duas lojas nos últimos 12 meses e gostaria de ver a tendência das duas lojas na mesma figura.
Havendo mais de uma série utilizamos a legenda com os argumentos:
Exemplo: traçe duas linhas sin(x) e cos(x) com números aleatórios em uma única figura e adicione a legenda para distinguir as linhas.
import matplotlib.pyplot as plt
import numpy as np
x= np.arange(0,1500,100)
plt.plot(np.sin(x),label = 'função sin x')
plt.plot(np.cos(x),label = 'função cos x')
plt.legend(loc='upper right')
plt.show()
Para plotar vários gráficos em sequência com figuras separadas, em vez de serem sobrepostos em uma única figura, chame a função plt.show() antes de plotar o próximo gráfico.
Exemplo: gráficos separados com o método plt.show() entre as plotagens.
import matplotlib.pyplot as plt
import numpy as np
x= np.linspace(0,100,50)
plt.plot(x,'r',label='x simples')
plt.show() # mostra o gráfico evitando a sobreposição de plotagens
plt.plot(x*x,'g',label='x duplo')
plt.show()
plt.legend(loc='upper right')
Pode haver algumas situações em que precisamos plotar vários gráficos menores juntos formando o enredo completo, com número variado de linhas e colunas de plotagens.
Isso pode ser realizado com o uso de subplotagens, usando a função plt.subplots().
Por exemplo, uma loja de varejo tem 6 lojas e o gerente gostaria de ver as vendas diárias de todas as 6 lojas em uma única janela para comparar os gráficos.
Isso pode ser visualizado usando subplotagens representando os gráficos plotados em linhas e colunas.
Subplotagens são usadas para plotar vários gráficos em uma única figura.
Exemplo: gráfico com um único subplot usando o método plt.subplots() sem argumentos.
import matplotlib.pyplot as plt
import numpy as np
x = np.random.rand(50)
y = np.sin(x*2)
fig, eixo = plt.subplots()
eixo.plot(y)
plt.show()
Use como argumento da função o número necessário de subplotagens no gráficos.
Exemplo: gráfico com duas subplotagens empilhadas verticalmente:
import matplotlib.pyplot as plt
import numpy as np
fig, eixos = plt.subplots(2)
x=np.linspace(0,100,10) # dados
eixos[0].set_title('Título da subplotagem 1') # título
eixos[0].plot(x, np.sin(x**2)) # atribuição
eixos[1].set_title('Título da subplotagem 2') # título
eixos[1].plot(x, np.cos(x**2)) # atribuição
fig.suptitle('Título superior das subplotagens')
plt.subplots_adjust(left=0.1, bottom=0.1, right=0.97, top=0.85, wspace=0.2, hspace=0.3)
plt.show()
A função plt.subplots_adjust() é usada para ajustar as margens das subplotages na figura, onde os parâmetros são:]
Declare a variável fig da matriz bidimensional instanciada com a função plt.subplot() com os argumentos para duas linhas e duas colunas de subplotagens verticais e horizontais, como no esquema abaixo:
fig1 | fig2 |
fig3 | fig4 |
Desempacote nas variáveis fig1, fig2, fig3 e fig4 os objetos das figuras das subplotagens, de acordo com o número de linhas e colunas usados como argumentos com o método plt.subplot().
import matplotlib.pyplot as plt
import numpy as np
fig, ((fig1, fig2), (fig3, fig4)) = plt.subplots(2, 2)
x = np.linspace(0,100,10) # dados
# adicione os dados aos gráficos
fig1.plot(x, x**2)
fig2.plot(x, x**3)
fig3.plot(x, np.sin(x**2))
fig4.plot(x, np.cos(x**2))
# adicionar título
fig.suptitle('Subplotagens horizontais')
plt.show()
Exemplo: outra maneira simples para criação de subplotagens, usando eixos contendo a tupla ((fig1,fig2),(fig3,fig4)) com os objetos das figuras.
import matplotlib.pyplot as plt
import numpy as np
fig, eixos = plt.subplots(2, 2)
x = np.linspace(0,100,10) # dados
# adicione os dados referentes a linha e coluna
eixos[0,0].plot(x, x**2 , 'g')
eixos[0,1].plot(x, x**3 , 'r')
eixos[1,0].plot(x, np.sin(x**2) , 'b')
eixos[1,1].plot(x, np.cos(x**2) , 'k')
# adicionar título
fig.suptitle("subplotagens com as coordenadas de matriz")
plt.show()
O Matplotlib é uma biblioteca orientada a objetos encapsulando propriedades e métodos.
Propriedades são as variáveis, e métodos são as funções, respectivamente, quando pertencem a um objeto.
Figure é a classe do objeto figure gerenciador de figuras de gráficos.
A figura do objeto é um recipiente para mostrar os gráficos e é instanciada com a chamada da função plt.figure().
O método plt.figure() cria e retorna um objeto figure vazio.
O objeto da figura tem parâmetros nomeados, sendo alguns dos principais:
Declare a variável fig com o objeto de figura.
Exemplo: diferentes gráficos alterando o tamanho da figura com 'figsize = (a,b)' onde a é a largura e b é a altura em polegadas.
O Pyplot do Matplotlib e o Numpy são importados com os nomes plt e np, respectivamente.
import matplotlib.pyplot as plt
import numpy as np
As séries x e y são criadas a partir do método np.array().
x = np.array([1,2,3,4,5,6,8,9,10])
y = x**2
Gráfico com tamanho quadrado
plt.figure(figsize=(4,4))
plt.xticks(())
plt.yticks(())
plt.plot(x,y)
plt.show()
Gráfico com tamanho retangular horizontal
plt.figure(figsize=(8,2))
plt.xticks(())
plt.yticks(())
plt.plot(x,y)
plt.show()
Gráfico com tamanho retangular vertical
plt.figure(figsize=(3,6))
plt.xticks(())
plt.yticks(())
plt.plot(x,y)
plt.show()
Exemplo: diferentes gráficos usando os parâmetros figsize, facecolor, edgecolor e linewidth e a função plt.subplots_adjust() para alterar as margens internas da figura.
Gráfico com tamanho quadrado
fig = plt.figure(figsize=(8,8), facecolor='y', edgecolor='r', linewidth=5)
plt.subplots_adjust(left=0.1, bottom=0.1, right=0.9, top=0.9)
plt.plot(x,y)
plt.show()
Gráfico com tamanho retangular horizontal
fig = plt.figure(figsize=(10,3), facecolor='y', edgecolor='r', linewidth=5)
plt.subplots_adjust(left=0.1, bottom=0.1, right=0.97, top=0.85)
plt.xticks(())
plt.yticks(())
plt.plot(x,y)
plt.show()
Gráfico com tamanho retangular vertical
fig = plt.figure(figsize=(3,6), facecolor='y', edgecolor='r', linewidth=5)
plt.subplots_adjust(left=0.3, bottom=0.3, right=0.7, top=0.7)
plt.xticks(())
plt.yticks(())
plt.plot(x,y)
plt.show()
Eixos é a região do gráfico com dados, podemos adicionar os eixos à figura usando o método fig.add_axes().
Este método tem quatro parâmetros:
Outros parâmetros que podem ser configurados com métodos para o objeto de eixos são:
Exemplo: adicione eixos usando o método add_subplot().
fig = plt.figure()
fig.add_subplot(241)
fig.add_subplot(242)
ax = fig.add_subplot(223)
ax.set_title("subplots")
plt.tight_layout()
plt.show()
Usando add_axes() para adicionar eixos à figura.
fig = plt.figure()
fig.add_subplot(241)
fig.add_subplot(242)
ax = fig.add_subplot(223)
ax.set_title("subplots")
plt.tight_layout()
fig.add_axes([0.77,.3,.2,.6])
ax2 =fig.add_axes([0.67,.5,.2,.3])
fig.add_axes([0.6,.1,.35,.3])
ax2.set_title("random axes")
plt.show()
Com duas séries em um mesmo eixo.
# amostra de dados
y = [1, 5, 10, 15, 20, 30]
x1 = [1, 10, 20, 30, 45, 55]
x2 = [1, 32, 45, 80, 90, 122]
# crie a figura
fig = plt.figure()
# primeiro eixo
eixo1 = fig.add_axes([0.2,0.2,0.4,0.4])
eixo1.plot(x1,y,'ys-') # amarelo quadrado sólido
eixo1.plot(x2,y,'go--') # verde círculo tracejado
# adicione parâmetros adicionais
eixo1.set_title("Adição de múltiplas linhas")
eixo1.set_xlabel("eixo x")
eixo1.set_ylabel("eixo y")
eixo1.legend(labels=("linha 1","Linha 2"),loc="lower right")
# segundo eixo
eixo2 = fig.add_axes([0.5,0.5,0.45,0.45])
eixo2.plot(x1,y,'ys-') # amarelo quadrado sólido
eixo2.plot(x2,y,'go--') # verde círculo tracejado
# adicione parâmetros adicionais
eixo2.set_title("Adição de múltiplas linhas")
eixo2.set_xlabel("eixo x")
eixo2.set_ylabel("eixo y")
eixo2.legend(labels=("linha 1","Linha 2"),loc="lower right")
plt.subplots_adjust(left=0.1, bottom=0.1, right=0.9, top=0.8)
plt.show()
O gráfico de barras representa os dados usando barras nas direções horizontal ou vertical.
Os gráficos de barras são usados para mostrar dois ou mais valores e, normalmente, os dados categóricos estão sobre o eixo x.
O comprimento da barra é proporcional à contagem de pontos da variável categórica no eixo x.
Use a função plt.bar() para plotar o gráfico de barras, usando como argumentos as listas de coordenadas x e y.
Exemplo: vamos criar um gráfico de barras simples.
O eixo x mostra disciplinas do ensino médio e o eixo y mostra os marcadores de cada disciplina.
import matplotlib.pyplot as plt
assuntos = ['Matemática','Português','Química','Física','Biologia']
marcas = [70,80,50,30,78]
plt.bar(assuntos,marcas)
plt.show()
Podemos realizar personalizações na plotagem:
As barras de erros podem ser adicionadas para representar os valores de erro referentes a um valor de matriz
No exemplo a seguir usamos o desvio padrão para mostrar como barras de erro.
import matplotlib.pyplot as plt
import numpy as np
assuntos = ['Matemática','Português','Química','Física','Biologia']
marcas = [70,80,50,30,78]
plt.bar(assuntos, marcas, color ='g', yerr=np.std(marcas))
plt.show()
import matplotlib.pyplot as plt
import numpy as np
assuntos = ['Matemática','Português','Química','Física','Biologia']
marcas = [70,80,50,30,78]
plt.barh(assuntos, marcas, color ='g', xerr=np.std(marcas))
plt.show()
Os gráficos de pizza exibem a proporção de cada valor em relação à soma total de valores.
Este gráfico requer uma única série para ser exibido.
Os valores no gráfico de pizza mostram a contribuição percentual em termos de uma pizza chamada ferramenta de cunha (wedge/widget).
O ângulo da cunha de cada valor é calculado com base na sua proporção em relação ao total de todos valores.
Essa visualização é melhor quando estamos tentando comparar diferentes segmentos dentro dos valores totais.
Por exemplo, um gerente de vendas quer saber a contribuição do tipo de pagamento em um mês, ou seja, a proporção de pagamentos com: dinheiro, cheque, pix, cartão de crédito, cartão de débito, PayPal e outros meios de pagamento.
Use a função plt.pie() para plotar o gráfico de pizza passando como argumento a lista única de valores.
A função calcula as fatias (ferramentas de cunha) como proporções convertidas em ângulos.
Use os seguintes argumentos específicos que podem ser usados para configurar o gráfico.
Exemplo: o gerente gostaria de saber a contribuição individual de cada vendedor em termos do tickets fechados na semana.
Plote o gráfico de pizza simples com os dados dos tickets da semana.
import matplotlib.pyplot as plt
import numpy as np
comissoes = [
10, 20, 8,
35, 30, 25]
vendedores = [
'Roberto','Pedro','Rosana',
'Lúcia','Dora','Reo'
]
# criar gráfico de pizza
plt.pie(
comissoes,
labels = vendedores)
plt.show()
Vamos adicionar parâmetros adicionais ao gráfico de pizza:
import matplotlib.pyplot as plt
comissoes = [
10, 20, 8,
35, 30, 25]
vendedores = [
'Roberto','Pedro','Rosana',
'Lúcia','Dora','Reo'
]
explode = [
0.2,0.1,0,
0.1,0,0]
plt.pie(
comissoes,
labels = vendedores,
explode = explode,
autopct = '%1.1f%%' )
plt.show()
O gráfico de dispersão é usado para visualizar a relação entre duas colunas/séries de dados, exibindo a coleção de pontos de dados sem conexão, necesitando de duas variáveis, uma para a posição x e a outra para a posição y.
É usado para representar a associação entre as variáveis e, principalmente, é usado antes de regressões, ajudando na interpretação sobre a existência de relação entre os valores das colunas.
Use a função plt.scatter() para plotar o gráfico de dispersão.
Use os seguintes argumentos para personalizar o gráfico:
Exemplo: crie um gráfico de dispersão simples com números aleatórios, mostrando a correlação entre uma série alteatória com ela mesma, e em seguida com outra série aleatória.
import matplotlib.pyplot as plt
import numpy as np
serie_1 = np.random.randn(1000)
plt.scatter(serie_1,serie_1)
plt.show()
serie_2 = np.random.randn(1000)
plt.scatter(serie_1,serie_2)
plt.show()
No primeiro gráfico observamos que a correlação da série serie_1 com ela mesma é máxima, pois quanto mais o gráfico cresce no eixo das absissas (eixo x), mais cresce no eixo das ordenadas (eixo y), na mesma proporção.
Não observamos correlação da série serie_1 com a série serie_2, pois os dados estão muito dispersos por serem completamente aleatórios.
Parâmetros adicionais:
Exemplo: crie o gráfico alterando o tamanho, cor, marca e transparência.
import matplotlib.pyplot as plt
import numpy as np
x = np.random.randn(1000)
y = np.random.randn(1000)
size = 150*np.random.randn(1000)
colors = 100*np.random.randn(1000)
plt.scatter(x, y, s=size, c = colors, marker ='*', alpha = 0.7)
plt.show()
O histograma é usado para entender a distribuição dos dados, sendo uma estimativa da distribuição de probabilidade de dados contínuos.
É semelhante ao gráfico de barras, mas é usado para representar a distribuição de uma variável contínua, enquanto o gráfico de barras é usado para variáveis discretas.
Cada distribuição é caracterizada por quatro elementos diferentes, incluindo:
O histograma requer dois elementos no eixo x mostrados usando compartimentos e no eixo y mostrados com a frequência dos valores em cada um dos compartimentos do conjunto de dados.
Cada compartimentos tem um intervalo com valores mínimos e máximos.
Use função plt.hist() para plotar o gráfico de dispersão.
A função plt.hist() tem argumentos que podem ser usados para configurar a figura do gráfico:
Exemplo: vamos gerar números aleatórios e usar os números aleatórios para gerar histograma.
import matplotlib.pyplot as plt
import numpy as np
data = np.random.randn(1000)
plt.hist(data)
plt.show()
Exemplo: adicione os parâmetros adicionais facecolor, linewidth, edgecolor, bins e alpha.
import matplotlib.pyplot as plt
import numpy as np
data = np.random.randn(1000)
plt.hist(data, facecolor ='y', edgecolor = 'k', linewidth = 2, bins = 30, alpha = 0.6)
plt.show()
Exemplo: crie vários histogramas em um único gráfico.
import matplotlib.pyplot as plt
import numpy as np
hist1 = np.random.normal(25,10,1000)
plt.hist(hist1,facecolor = 'yellow', alpha = 0.5, edgecolor ='b', bins=50)
hist2 = np.random.normal(200,5,1000)
plt.hist(hist2,facecolor = 'orange', alpha = 0.8, edgecolor ='b', bins=30)
plt.show()
O método savefig() no Pyplot do Matplotlib salva o gráfico como imagem em arquivo.
O gráfico pode ser salvo em vários formatos: .png, .jpeg, .pdf e muitos outros.
Crie uma figura e salvá-la como imagem .png:
import matplotlib.pyplot as plt
import numpy as np
x = np.arange(6)
y = [5,10,20,25,30,40]
fig = plt.figure()
eixo = plt.subplot(111)
eixo.plot(x, y, label = 'itens')
plt.title('salvando como imagem')
eixo.legend()
fig.savefig('imagem-salva.png')
A imagem é salva com um nome de arquivo como 'imagem-salva.png'.
Para exibir a imagem novamente, use o seguinte pacote e comandos:
import matplotlib.pyplot as plt
import matplotlib.image as mpimg
image = mpimg.imread("imagem-salva.png")
plt.imshow(image)
plt.show()