Guia básico para plotar gráficos usando o matplotlib do Python parte 2

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')

cidades


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()

notas por pessoa


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()

 

titulo paulista


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()

dados gerados


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:


 

3 comentários em “Guia básico para plotar gráficos usando o matplotlib do Python parte 2”

  1. 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!

    1. 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()

      Chart

  2. 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

Deixe uma resposta para Mauricio Soares da Silva Cancelar resposta