PyPlot
O PyPlot é um módulo da biblioteca matplotlib para criação de gráficos.
Exemplos
- Exemplo: Apresenta uma linha entre pontos (x, y). A linha é vermelha (‘r’) e tem largura 3 vezes a largura padrão.
from matplotlib import pyplot as plt x=[1,2,3,4] y=[10,20,30,50] plt.title('Exemplo de uma linha com pyplot') plt.plot(x, y, 'r', label = 'linha única', linewidth=3) plt.legend() plt.xlabel('Eixo X') plt.ylabel('Eixo Y') plt.show()
A saida do programa é mostrada abaixo.

- Exemplo: Mostra duas linhas que usam as mesmas coordenadas x. A primeira linha é vermelha (‘r’), cada ponto é marcado com um quadrado (‘s’) e os pontos são ligados por uma linha contínua (‘-‘). A segunda linha é azul (‘b’), cada ponto é marcado com um círculo (‘o’) e os pontos são ligados por uma linha desenhada por ‘-.’. Note que foram alteradas as características dos labels da figura como, por exemplo, o tamanho da fonte. Além disso, foi definido que a legenda das linhas deveria aparecer centralizada no topo da figura.
from matplotlib import pyplot as plt x=[1,2,3,4] y1=[10,20,30,50] y2=[50,30,20,10] plt.title('Exemplo de linhas com pyplot', fontsize=20, fontweight="bold", color="orange") plt.plot(x, y1, 'rs-', label = 'linha 1', linewidth=2) plt.plot(x, y2, 'bo-.', label = 'linha 2', linewidth=2) plt.legend(loc='upper center') plt.xlabel('Eixo X', fontsize=18) plt.ylabel('Eixo Y', fontsize=18) plt.show()
A figura gerada pelo programa é apresentada a seguir.

- Exemplo: Mostra três círculos com diferentes características. O primeiro círculo tem como ponto central as coordenadas (0.5, 0.5), raio de 0.3 e cor padrão azul. O segundo círculo tem coordenadas (0.4, 0.2), raio de 0.2 e cor vermelha. O terceiro círculo tem coordenadas (0.7, 0.8), raio de 0.15 e é definido por uma linha laranja de largura 3 (não é preenchido).
import matplotlib.pyplot as plt figure, axes = plt.subplots() circulo1 = plt.Circle((0.5, 0.5), 0.3) circulo2 = plt.Circle((0.4, 0.2), 0.2, color="red") circulo3 = plt.Circle((0.7, 0.8), 0.15, fill=False, color="orange", linewidth=3) axes.set_aspect(1) axes.add_artist(circulo1) axes.add_artist(circulo2) axes.add_artist(circulo3) plt.title('Teste de Círculos', fontsize=24, fontweight="bold", color="orange") plt.show()
Abaixo o desenho gerado pelo programa.

- Exemplo: O programa plota as funções seno e cosseno de -360 a 360 graus. Em primeiro lugar, é criado uma lista com o método “arrange()” da biblioteca numpy. O método “radians()” da biblioteca math calcula os valores de -360o e 360o em radianos que define os valores inicial e final da lista com incremento de 0.1. Em seguida as funções sin() e cos() são usadas para gerar os valores do eixo Y do gráfico.
import matplotlib.pyplot as plt import numpy as np import math x = np.arange(math.radians(-360), math.radians(360), 0.1) y = np.sin(x) z = np.cos(x) plt.plot(x,y, color="blue", linewidth=3) plt.plot(x,z, color="red", linewidth=2) plt.xlabel('radianos', fontsize=16) plt.ylabel('sen(x) e cos(x)', fontsize=16) plt.title('Gráfico de seno e cosseno', fontsize=18, fontweight="bold", color="orange") plt.legend(['sen(x)', 'cos(x)']) plt.show()
O resultado produzido pelo programa é mostrado abaixo.

- Exemplo: Apresenta um gráfico de barras com os maiores artilheiros do Botafogo.
from matplotlib import pyplot as plt artilheiros = ["40tinha","Carvalho","Garrincha","Heleno","Nilo","Jarizinho"] gols = [313,261,245,209,190,189] plt.bar(artilheiros,gols,color="Black") #plt.barh cria barras horizontais plt.ylabel("Gols") plt.xlabel("artilheiros") plt.title("Maiores artilheiros do Botafogo") plt.show()
A saída é

É possível definir uma cor para cada barra usando uma lista.
plt.bar(artilheiros,gols,color=["black", "blue", "yellow", "green", "violet", "orange"])
A nova saída do programa é

O uso de um conjunto (color={“black”, “blue”, “yellow”, “green”, “violet”, “orange”}) no lugar da lista faz com que as cores sejam escolhidas de forma aleatória.

- Exemplo: Apresenta as médias das notas de três disciplinas nas provas P1, P2 e P3.
from matplotlib import pyplot as plt import numpy as np notas_DPW = [6,9,8] notas_TP1 = [4,7,6] notas_MT = [6,8,8] #Largura de barra barWidth = 0.3 r1 = np.arange(len(notas_DPW)) r2 = [x + barWidth for x in r1] r3 = [x + barWidth for x in r2] #aumentar tamanho plt.figure(figsize=(10,5)) #Criar barras plt.bar(r1, notas_DPW,color='red',width=barWidth,label="DPW") plt.bar(r2, notas_TP1,color='green',width=barWidth,label="TP1") plt.bar(r3, notas_MT,color='blue',width=barWidth,label="Matemática") #legendas plt.xlabel('Disciplinas') plt.ylabel("Notas") plt.xticks([r + barWidth for r in range(len(notas_DPW))],["P1","P2","P3"]) plt.legend() plt.show()
Abaixo o gráfico obtido.

- Exemplo: Usa o gráfico no formato de pizza para mostrar a participação dos alunos de quatro cursos em um questionário. No total 103 alunos participaram.
from matplotlib import pyplot as plt label = 'Engenharia','Nutrição','Matemática','História' sizes = [31,22,10,40] figl,axl=plt.subplots() axl.pie(sizes,labels=label,autopct='%1.2f%%',shadow=True,startangle=0) axl.axis('equal') plt.title('Respostas do questionário', fontsize=20, fontweight="bold") plt.show()
O gráfico produzido é mostrado abaixo.

O parâmetro “shadow=True” adiciona uma sombra ao gráfico, enquanto o parâmetro “startangle” indica onde começa a primeira fatia da pizza.

Portanto, para um ângulo de 90 graus, temos

É possível deslocar um ou mais pedaços da pizza com o parâmetro “explode“. Por exemplo, para enfatizar a primeira fatia do exemplo acima, pode-se usar
distancia = [0.2, 0, 0, 0] axl.pie(sizes,labels=label,autopct='%1.2f%%',shadow=True,explode=distancia,startangle=0)
O gráfico resultante da alteração é mostrado abaixo.

- Exemplo: A partir da informação das idades de várias pessoas, o programa calcula quantas pessoas exitem em uma determinada faixa de idade. Os dados são divididos em 10 faixas (ou bins). Cada faixa tem largura 0.9 (isto significa que existirá uma pequena separação entre as barras).
from matplotlib import pyplot as plt idades=[65, 26, 67, 50, 47, 73, 1, 58, 2, 94, 12, 22, 12, 95, 25, 13, 61, 41, 24, 95, 3, 71, 53, 24, 23, 44, 83, 30, 19, 32, 71, 66, 45, 6, 99, 4, 76, 27, 50, 18, 58, 61, 53, 72, 14, 78, 36, 89, 6, 71, 58, 69, 22, 34, 38, 51, 71, 83, 22, 22, 36, 44, 16, 58, 20, 49, 28, 55, 21, 26, 23, 41, 21, 95, 18, 63, 55, 2, 61, 81, 39, 20, 39, 17, 66, 60, 73, 26, 54, 16, 76, 83, 9, 12, 15, 35, 54, 11, 7, 61] plt.title('Idades de um grupo',fontsize=20) plt.xlabel('Idade') plt.ylabel('Frequência Absoluta') plt.hist(idades,10,rwidth=0.9) plt.show()
O programa gera o gráfico abaixo. Note que a faixa com maior quantidade de pessoas está entre 21 e 31 anos.

Se o parâmetro “density=True” for definido, os pesos são normalizados de modo que cada faixa representa um percentual. Assim, é possível comparar o histograma com a distribuição normal (usando a média e o desvio padrão dos dados fornecidos).
plt.hist(idades,10,rwidth=0.9,density=True) import numpy from scipy.stats import norm med = numpy.mean(idades) dp = numpy.std(idades) min = numpy.min(idades) max = numpy.max(idades) x = numpy.linspace(min, max, 100) y = norm.pdf(x, med, dp) plt.plot(x, y, color="red", linewidth=3) plt.show()
A nova imagem gerada é mostrada a seguir.

- Exemplo: Plota a distribuição normal com média igual a 4 e desvio padrão igual a 2. Uma parte da área do gráfico é coberta com azul. O método “savefig()” é usado para armazenar o gráfico gerado no arquivo “normal.png”.
from scipy.stats import norm import scipy.stats import numpy as np import matplotlib.pyplot as plt # Parâmetros media = 4 dp = 2 x_inicio = -2 x_fim = 10 pt1 = 3 pt2 = 6 # Plota gráfico fig, ax = plt.subplots(figsize=(12, 10)) x = np.arange(x_inicio, x_fim, 0.00001) ax.plot(x, norm.pdf(x, scale=dp, loc=media), 'r-', lw=5) # Preenche área com azul plt.plot([pt1 ,pt1 ],[0.0, scipy.stats.norm.pdf(pt1 ,media, dp)], color='lightblue') plt.plot([pt2 ,pt2 ],[0.0, scipy.stats.norm.pdf(pt2 ,media, dp)], color='lightblue') ptx = np.linspace(pt1, pt2, 100) pty = scipy.stats.norm.pdf(ptx, media, dp) plt.fill_between(ptx, pty, color='lightblue') # Define parâmetros do gráfico plt.xlim(x_inicio, x_fim) plt.ylim(0, 0.25) x_ticks = [-2, 0, 2, 4, 6, 8, 10] ax.set_xticks(x_ticks) y_ticks = [0, 0.05, 0.10, 0.15, 0.20, 0.25] ax.set_yticks(y_ticks) ax.set_yticklabels(["0", "0,05", "0,10", "0,15", "0,20", "0,25"]) plt.xlabel("x", fontsize="24") plt.ylabel("f(x)", fontsize="24") plt.tick_params(labelsize=20) plt.tick_params(labelsize=20) plt.savefig("normal.png")
Abaixo o gráfico gerado.
