Por: Ricardo Dortas Schönhofen
Como plotar gráficos usando matplotlib
Continuação dos exemplos de como plotar gráficos usando matplotlib. Veja a parte 1.
#importando as classes da forma mais usual
import matplotlib.pyplot as plt
import numpy as np
#definindo variáveis usadas nos exemplos
pop = {"São Paulo": 12000000, "Rio": 7000000, "Salvador": 4000000, "Recife": 3500000, "Porto Alegre": 2500000}
cidades = [i for i in pop.keys()]
populacao = [j for j in pop.values()]
popPos = np.arange(len(cidades))
azul = "blue"
verde = "green"
preto = "black"
Desenhando um gráfico de barras horizontal
def plota_barra_h_1(): plt.barh(popPos, populacao, align='center', color=azul) plt.yticks(popPos, cidades) plt.xlabel('População') plt.title('População de cidades brasileiras')
Desenhando um gráfico de duas barras
def plota_bar_dupla_1(): grupos = 5 media_chico = (9.1, 5.4, 4.0, 7.5, 7.0) media_joao = (8.6, 6.3, 5.5, 3.5, 5.6) fig, ax = plt.subplots() indice = np.arange(grupos) bar_larg = 0.4 transp = 0.7 plt.bar(indice, media_chico, bar_larg, alpha=transp, color=azul, label='Chico') plt.bar(indice + bar_larg, media_joao, bar_larg, alpha=transp, color=verde, label='João') plt.xlabel('Matéria') plt.ylabel('Notas') plt.title('Notas por pessoa') plt.xticks(indice + bar_larg, ('Matemática', 'Português', 'Biologia', 'Física', 'Química')) plt.legend() plt.tight_layout() plt.show()
Desenhando um gráfico de pizza
def plota_pizza_1():
labels = ['Corinthias', 'Palmeiras', 'Santos', 'São Paulo']
titulos = [27, 22, 22, 22]
cores = ['lightblue', 'green', 'white', 'red']
explode = (0.1, 0, 0, 0) # somente explode primeiro pedaço
total = sum(titulos)
plt.pie(titulos, explode=explode, labels=labels, colors=cores, autopct=lambda p: '{:.0f}'.format(p * total / 100), shadow=True, startangle=90)
# Determina que as proporções sejam iguais ('equal') de modo a desenhar o círculo
plt.axis('equal')
plt.show()
Desenhando um gráfico de dispersão (Scatter Plot)
def plota_dispersao_1(): fig = plt.figure() ax1 = fig.add_subplot(121) #gera dados aleatórios N=1000 x = np.random.randn(N) y = np.random.randn(N) ax1.scatter(x,y,color=azul,s=5,edgecolor='none') #deixa os eixos quadrados ax1.set_aspect(1./ax1.get_data_ratio()) plt.show()
Atualização em 2018-11-08.
Segue uma forma de criar um gráfico de colunas num eixo e de linhas no outro eixo.
#cria os dados X = [‘A’,’B’,’C’,’D’,’E’] Y = [9.1, 5.4, 4.0, 7.5, 4.0] Z = [8.6, 6.3, 5.5, 3.5, 4.0] K = [8.1, 6.4, 3.0, 6.5, 4.0] J = [6.1, 7.4, 2.0, 8.5, 4.0] data5 = [8.2, 6.35, 4.8, 6.5, 4] #cria a figura e o eixo fig = plt.figure() ax1 = fig.add_subplot(111) def plot_bar(X, vals, width=0.8): n = len(vals) _X = np.arange(len(X)) for i in range(n): ax1.bar(_X – width/2. + i / float(n) * width, vals[i], width=width/float(n), align=”edge”) plt.xticks(_X, X) ax1.set_ylabel(‘notas’, color=’b’) #cria o rótula do primeiro eixo plot_bar(X, [Y,Z,K,J]) ax2 = ax1.twinx() # cria o segundo eixo ax2.set_ylabel(‘média’, color=’b’) #cria o rótula do segundo eixo ax2.plot(index, data5, color=’b’) ax2.tick_params(axis=’y’, labelcolor=’b’) ax2.set_xticks(index) plt.show()
Veja também:
- Guia básico para plotar gráficos usando o matplotlib do Python
- Guia de acesso rápido ao Matplotlib
- Biblioteca Seaborn com o matplotlib
Oi Ricardo, gostei muito do seu post, o seu gráfico em barra é muito próximo daquilo que preciso fazer. Você me dá uma ajuda? A diferença é que meu dataframe possui 5 colunas além da coluna indice(data – ano/mes/dia-hora). Eu preciso plotar 4 colunas do meu dataframe na forma de barras (no seu casso são duas, chico e joão) e a quinta coluna na forma de linha, esta última tem uma escala diferente das outras 4. Resumindo, seria um gráfico de barras e linha, com 2 eixos na vertical e um mesmo eixo x em comum.
Desde já, muito obrigado amigo!
Mauricio, tudo bem? Veja pls se esse código te ajuda.
import matplotlib
import matplotlib.pyplot as plt
X = [‘A’,’B’,’C’,’D’,’E’]
Y = [9.1, 5.4, 4.0, 7.5, 4.0]
Z = [8.6, 6.3, 5.5, 3.5, 4.0]
K = [8.1, 6.4, 3.0, 6.5, 4.0]
J = [6.1, 7.4, 2.0, 8.5, 4.0]
data5 = [8.2, 6.35, 4.8, 6.5, 4]
fig = plt.figure()
ax1 = fig.add_subplot(111)
def plot_bar(X, vals, width=0.8):
n = len(vals)
_X = np.arange(len(X))
for i in range(n):
ax1.bar(_X – width/2. + i / float(n) * width, vals[i],
width=width/float(n), align=”edge”)
plt.xticks(_X, X)
ax1.set_ylabel(‘notas’, color=’b’)
plot_bar(X, [Y,Z,K,J])
ax2 = ax1.twinx() # cria o segundo eixo
ax2.set_ylabel(‘média’, color=’b’)
ax2.plot(index, data5, color=’b’)
ax2.tick_params(axis=’y’, labelcolor=’b’)
ax2.set_xticks(index)
plt.show()
boa noite, muitos parabéns pelo excelente guia para python.
comecei a ter aulas de Python a pouco tempo, e o professor pediu para importar um documento CSV e representa-lo graficamente com os dados (anos, eixo x e masculino e Feminino eixo y, barras separadas com cores diferentes e a media).
a tabela ainda é grande.
https://www.pordata.pt/DB/Portugal/Ambiente+de+Consulta/Tabela
no entanto estou a ter muitos problemas com meu python 3.7 32bits, tenho as bibliotecas já estaladas, mas no entanto dá-me sempre erros, que nem consigo identificar, e com professor fora do pais, não consigo tirar minhas duvidas.
se me pudesse ajudar,
um muito obrigado