sábado, 9 de maio de 2020

Setas com Matplotlib

Setas com Matplotlib

Nos exemplos anteriores aprendemos a adicionar textos e caixas de textos. Colocar textos nos gráficos é muito útil para explicar um dado, uma parte dele ou chamar atenção para uma área do gráfico. Mas com a biblioteca matplotlib temos uma ferramenta mais apropriada para chamar atenção para uma área do gráfico. Essa ferramenta são as setas. Com setas apontando para uma região do gráfico, não tem como essa área passar despercebida. E nesse tutorial vamos aprender a adicionar setas no gráfico com a biblioteca matplotlib.

Como adicionar setas ao gráfico

Para adicionar setas ao gráfico utilizamos o método annotate. O método annotate nos permite criar alguns tipos de setas e adicionar no gráfico.

Exemplo
import numpy as np
import matplotlib.pyplot as plt

X = np.linspace(-4, 4, 1024)
Y = .25 * (X + 4.) * (X + 1.) * (X - 2.)

plt.annotate('Vale',
      horizontalalignment = 'left',
      verticalalignment = 'bottom',
      xytext = (-1.5, 3.),
      xy = (0.75, -2.7),
      arrowprops = dict(facecolor = 'black', shrink = 0.05))

plt.plot(X, Y)
plt.show()

Executando o código acima o gráfico deve ficar igual a este:

Como funciona o parâmetro annotate

O parâmetro adiciona uma seta com uma legenda no gráfico. Para isso o método precisar receber alguns argumentos, como no exemplo acima. O primeiro argumento é uma string que será uma legenda da seta. O segundo argumento alinha a seta a esquerda do gráfico. O terceiro argumento alinha a seta para a parte de baixo. O quarto argumento recebe as coordenadas da legenda. O quinto argumento recebe as coordenadas da ponta da seta. E o ultimo argumento define a cor e o quanto a seta ficara afastada da legenda.

quinta-feira, 7 de maio de 2020

Mais texto com Matplotlib

Mais texto com Matplotlib

A biblioteca matplotlib nos permite fazer várias modificações no texto que queremos adicionar no gráfico. Além de definir a posição podemos definir o seu alinhamento e adicionar uma marcação no texto.

Alinhamento

O texto que será adicionado ao gráfico é limitado por uma caixa imaginaria. Utilizamos essa caixa para posicionar o texto no gráfico, em relação as coordenadas que passamos para o método text. Assim usamos o posicionamento horizontal e vertical para definir como o alinhamento será feito.
Essas são as opções de alinhamento vertical:

  • 'center': Relativo ao centro da caixa imaginaria do texto.
  • 'top': Relativo ao topo da caixa imaginaria do texto.
  • 'bottom': Relativo a parte de baixo da caixa imaginaria do texto.
  • 'baseline': Relativo a base do texto.

Opções de alinhamento horizontal:

  • 'center': relativo ao centro da caixa de texto.
  • 'left': relativo ao lado esquerdo da caixa de texto.
  • 'rigth': relativo ao lado direito da caixa de texto.

Personalizando caixa de texto

Para personalizamos a caixa de texto utilizamos o parâmetro bbox. O parâmetro bbox recebe um dicionario com as configurações de aparência da caixa de texto.

Exemplo
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.cm as cm

x = np.linspace(-4, 4, 1024)
y = .25 * (x + 4.) * (x + 1.) * (x - 2.)

box_setup = {
  'facecolor': '.75',
  'edgecolor': 'k',
  'boxstyle': 'round'
}

plt.text(0.5, -0.25, 'Vale', bbox=box_setup)
plt.scatter(x, y, c = x, cmap = cm.hot)
plt.show()

Executando o exemplo acima o resultado deve ser um gráfico igual a esse:

Como funciona…

O dicionário passado ao parâmetro bbox define as configurações de aparência da caixa de texto. Veja quais são os valores que o parâmetro aceita:
facecolor: define a cor de fundo usado na caixa de texto.
Edgecolor: define a cor que circunda a caixa de texto.
Boxstyle: define a aparência da caixa, se ela vai ser aredondada (round) ou quadrada (square).

Adicionando texto ao gráfico com Matplotlib

Adicionando texto ao gráfico com Matplotlib

Se você, por algum motivo, precisar colocar um texto dentro do gráfico você pode fazer isso sem muita complicação com a biblioteca matplotlib. Até aqui utilizamos legendas em lugares específicos como o título do gráfico e nos eixos x e y. Agora vamos aprender a colocar um texto em qualquer lugar do gráfico.

Como adicionar texto no gráfico

Para adicionar texto no gráfico com a biblioteca matplotlib utilizamos o método text.

Exemplo
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.cm as cm

x = np.linspace(-4, 4, 1024)
y = .25 * (x + 4.) * (x + 1.) * (x - 2.)

plt.text(0.5, -0.25, 'Vale')
plt.scatter(x, y, c = x, cmap = cm.hot)
plt.show()

Executando o código acima o gráfico apresentado deve ser igual a esse:

Como funciona o método text

O método text recebe três argumentos. O primeiro argumento é a posição do eixo x do texto, o segundo argumento é a posição y e o terceiro é o texto que será adicionado no gráfico. Assim podemos adicionar qualquer texto em qualquer lugar do gráfico, apenas com o método text.

Adicionando uma legenda para cada eixo

Adicionando uma legenda para cada eixo

Com a biblioteca matplotlib podemos adicionar uma legenda para cada eixo. Isso é útil quando utilizamos dados que variam de acordo com duas variáveis. Como a variação de temperatura com o passar do tempo, o aumento da velocidade por hora, o aumento da pressão com a temperatura, entre outros dados. A biblioteca matplotlib nos permite a adição de legendas aos eixos do gráfico, para essas situações e outras situações, utilizando métodos.

Como adicionar legendas no gráfico com matplotlib

Para adicionar legendas aos eixos do gráfico utilizamos os métodos xlabel e ylabel.

Exemplo
import matplotlib.pyplot as plt
import matplotlib.cm as cm
import numpy as np

x = np.arange(100)

faixa_cor = np.linspace(0, 100, len(x))

plt.title('Temperatura/Horas')
plt.xlabel('Horas')
plt.ylabel('Temperatura')
plt.scatter(x, x, c = faixa_cor, cmap = cm.hot)
plt.show()

Executando o código acima o seu gráfico deve ser igual a esse:

Como funcionam os métodos xlabel e ylabel

O funcionamento dos dois métodos é bem simples. Para adicionar a legenda ‘Temperatura’ no eixo y passamos a string ‘Temperatura’ para o método ylabel. Com o método xlabel acontece a mesma coisa.

Usando notações no estilo LaTeX com Matplotlib

Usando notações no estilo LaTeX com Matplotlib

No exemplo anterior, quando adicionamos um título ao gráfico, o título utilizado foi uma string simples. Utilizando o mesmo método não seria possível adicionar uma formula matemática. Mas e se quisermos utilizar uma formula matemática para o título? Nesse caso teremos que utilizar o LaTex com a biblioteca matplotlib para adicionar uma formula matemática como título do nosso gráfico.
Utilizar formulas matemáticas como títulos de gráficos é interessante para mostrar qual foi a formula matemática utilizada para criar uma curva no gráfico. Mas muitas vezes você não vai precisar criar um gráfico com um título de formula matemática a não ser num contesto cientifico. Mas é sempre bom saber como se faz no caso de uma necessidade.

Mãos a obra…

Para trabalhar com o estilo LaTeX precisamos ter o LaTeX instalado no nosso computador. O o LaTeX instalado a biblioteca matplotlib pode interpretar as notações no estilo LaTeX e apresentar a formula de forma correta. Para baixar e instalar o LaTeX no seu computador acesse: https://en.wikibooks.org/wiki/LaTeX/Installation.
Obs: É possível que você não precise instalar o LaTeX.

LaTeX

As formula, matemáticas no estilo LaTeX, são escritas utilizando uma mistura de comandos e texto e armazenadas em arquivos de texto sem formatação. Com esse arquivo o LaTeX interpreta as instruções e renderiza a formula matemática.

Como utilizar o LaTeX num gráfico com matplotlib

Vamos criar uma curva no gráfico utilizando uma formula matemática e mostrar qual foi a famula utilizada no título do gráfico.

Exemplo
import numpy as np
import matplotlib.pyplot as plt

X = np.linspace(-4, 4, 1024)
Y = .25 * (X + 4.) * (X + 1.) * (X - 2.)

plt.title('$f(x)=\\frac{1}{4}(x+4)(x+1)(x-2)$')
plt.plot(X, Y, c = 'k')
plt.show()

Executando o código acima o seu gráfico deve ficar igual a esse:

Como funciona…

Como você pode ver no exemplo acima, não utilizamos um método novo para criar um título com uma formula matemática. A única diferença foi a string passada para o método title. Nessa string é possível perceber que a string começa e termina com um cifrão. Isso indica para a biblioteca matplotlib que essa string deve ser interpretada com o estilo LaTeX.
Uma coisa importante de se notar é que a linguagem LaTeX usa o caractere \ como caractere de escape, assim como a linguagem python. Nesses casos utilize duas barras invertidas.
Nesse exemplo usamos a linguagem LaTeX para criar um título, mas ela pode ser usada para criar qualquer tipo de texto como legendas, labels e títulos.

Adicionando título ao gráfico com Matplotlib

Adicionando título ao gráfico com Matplotlib

Introdução

Uma pratica muito comum e útil é adicionar títulos e legendas no seu gráfico. Não adianta ter dados num gráfico se você não sabe o que eles estão representando. Um gráfico além de representar os dados da maneira mais fiel possível, ele precisa ser compreendível. Uma tarefa quase impossível quando tudo que se tem no gráfico são linhas, pontos ou marcadores. Daí a importância de adicionar legendas e títulos aos gráficos. Com isso uma pequena olhada no gráfico já será suficiente para compreender os seus dados, pelo menos nos gráficos mais simples.

Adicionando um título

Para o nosso primeiro exemplos vamos fazer algo simples: adicionar um título ao nosso gráfico. A biblioteca matplotlib fornece um método para adicionarmos um título ao nosso gráfico de forma muito simples e rápida.

Como adicionar um título ao gráfico

Um título de um gráfico pode ser adicionado passando o título desejado para o método title.

Exemplo
import matplotlib.pyplot as plt
import matplotlib.cm as cm
import numpy as np

x = np.random.randn(50, 1)
y = np.random.randn(50, 1)
faixa_cor = np.linspace(0, 8 * 2 * np.pi, 50)

plt.title('Meu título')
plt.scatter(y, x, c = faixa_cor, cmap = cm.viridis)
plt.show()

Executando o código acima o seu gráfico deve parecer com esse:

Como funciona o método title

O funcionamento do método title é muito simples. O recebe uma string e essa string passada para o método será o título do gráfico. Como no exemplo acima: passamos a string ‘Meu título’ e o título do gráfico é Meu título.

quarta-feira, 6 de maio de 2020

Definindo esquema de cores com Matplotlib

Definindo esquema de cores com Matplotlib


O esquema de cores padrão da biblioteca matplotlib é o fundo branco com os elementos do gráfico em preto. Esse é o padrão para a maioria dos elementos. Quando um elemento, que pode representar vários dados, é renderizado a biblioteca adiciona mais cores. E já aprendemos como mudar as cores desses elementos. Para a maioria das situações esse esquema de cores padrão da biblioteca já esta pronto para ser impresso. Mas e se você quiser que o fundo do gráfico fique na cor preta e os outros elementos que compõem o gráfico na cor branco? Isso é o que vamos aprender agora.

Como mudar o esquema de cores de um gráfico

Como já vimos antes a biblioteca matplotlib nos permite alterar a cor das linhas, dos pontos e dos diagramas de caixa. É possível alterar a cor dos elementos do gráfico um por um. Mas isso seria demorado. E existe um jeito mais rápido de fazer isso. A biblioteca matplotlib nos fornece um jeito de fazer isso mais facilmente, já que todos os objetos da biblioteca escolhem uma cor de um objeto centralizado.
Nesse exemplo vamos utilizar as configurações centralizadas da biblioteca matplotlib para criar um gráfico com o fundo preto:
Exemplo
import numpy as np
import matplotlib as mpl
from matplotlib import pyplot as plt

mpl.rcParams['lines.linewidth'] = 2
mpl.rcParams['axes.facecolor'] = 'k'
mpl.rcParams['axes.edgecolor'] = 'w'
mpl.rcParams['xtick.color'] = 'w'
mpl.rcParams['ytick.color'] = 'w'
mpl.rcParams['figure.facecolor'] = 'k'

X = np.linspace(0, 7, 1024)
plt.plot(X, np.sin(X))
plt.plot(X, np.cos(X))
plt.show()
Executando exemplo acima o gráfico mostrado deve ser igual a esse:

Como funciona a centralização de configurações do matplotlib

O objeto rc funciona como um objeto centralizador de configurações. Todo objeto que vai ser desenhado no gráfico procura suas configurações padrão no objeto rc. Assim se os valores das propriedades cor e largura do objeto rc forem alterados, todos os outros elementos terão as mesma configurações por padrão.