sexta-feira, 1 de maio de 2020

Barras com cores personalizadas

Barras com cores personalizadas


Os gráficos com barras talvez seja o tipo de gráfico mais conhecido. Sendo muito utilizado em apresentações e sites na internet. Principalmente para representar o aumento ou diminuição de algum dado. Ou simplesmente comparar dados. O que é mais fácil com gráficos com barras de cores diferentes. E é isso que vamos fazer agora.

Como personalizar a cor das barras do matplotlib

A escolha da cor das barras do matplotlib é feita passando a cor desejada para o parâmetro color. O valor da cor pode ser passado com três cores, quatro cores, nomes definidos ou em níveis de cinza. Assim como nos exemplos anteriores.
Exemplo
import matplotlib.pyplot as plt
from numpy import arange, array

x = arange(4)
nascimento_meninos = array([15, 16, 18, 17])
nascimento_meninas = array([14, 19, 18, 15])

plt.barh(x, nascimento_meninos, color = (.0, .40, 1.))
plt.barh(x, -nascimento_meninas, color = (1.0, .0, .40))
plt.show()
O resultado do código acima deve ser o gráfico abaixo, com barras na vertical vermelhas e azuis:

Como funciona...

Quando chamamos a função barh, passamos para o parâmetro color uma tupla com três valores (cores RGB), cada um referente às cores vermelho, verde e azul, respectivamente.
É importante notar que os valores das cores variam de 0 até 1. É como fazer uma receita. Para criar um vermelho mais para o rosa, se usa três ingredientes: vermelho, verde (nada) e um pouquinho de azul.

Tem mais...

Também podemos passar uma lista de cores para o parâmetro color.
Exemplo
import matplotlib.pyplot as plt
import numpy as np

x = np.arange(4)
y = np.random.randn(4)

nivel_cinza = ['.25', '.50', '.75', '.90']

plt.bar(x, y, color = nivel_cinza)
plt.show()
Nesse exemplo, passamos para o parâmetro color uma lista de strings com os valores em níveis de cinza.
É importante lembra que o número de cores deve coincidir com o número de barras.

Gráficos de dispersão com cores personalizadas

Gráficos de dispersão com cores personalizadas


Assim como podemos personalizar as cores das retas no exercício anterior, podemos personalizar as cores dos pontos do nosso gráfico. É o que veremos a seguir.

Mãos a obra...

A função scatter disponibiliza duas opções para controlar as cores dos pontos através do seu parâmetro color: Uma cor para todos os pontos: se o valor passado para o parâmetro for uma cor valida, todos os pontos do gráfico vão ter a mesma cor. Uma cor diferente para cada ponto: também podemos criar cada ponto com uma cor especifica. Mas para fazer isso precisamos criar uma lista com cores matplotlib válidas.

Como fazer pontos com diferentes cores

Nesse primeiro exemplo vamos criar um conjunto de dados, A e B. Cada conjunto vai ser desenhado no gráfico com uma cor diferente. Por isso vamos chamar a função scatter duas vezes, uma para cada cor.
Exemplo
import matplotlib.pyplot as plt
from numpy.random import randn

a = randn(100, 2)
b = randn(100, 2)

plt.scatter(a[:,0], a[:,1], color = (.0, .10, 1.))
plt.scatter(b[:,0], b[:,1], color = (.0, .80, .2))

plt.show()
A execução do código acima deve resultar num gráfico parecido com esse:

Usando uma lista de cores

Para usar uma lista com cem cores, precisamos de cem coordenadas de pontos.
Nesse exemplo vamos fazer um gráfico com cem pontos aleatórios e uma lista de cores com cem cores aleatórias.
Exemplo
import matplotlib.pyplot as plt
from numpy.random import randn, rand

a = randn(100, 2)

lista_cor = rand(100, 3)

plt.scatter(a[:,0], a[:,1], color = lista_cor)

plt.show()
O resultado deve ser um gráfico parecido com esse:

Como o parâmetro color recebe os valores

O parâmetro color pode receber os valores isolados, como acontece no primeiro exemplo, e em listas, como acontece no segundo exemplo. Os valores passados podem ser tantos numéricos como strings (no caso de nomes de cores definidos).

Tem mais...

Se por algum motivo você precisar criar uma borda nos pontos, isso é possível com o parâmetro edgecolor.
O parâmetro edgecolor cria uma borda no ponto com a cor passada para o parâmetro. O valor passado para o parâmetro edgecolor segue o mesmo padrão do parâmetro color. Assim podemos usar cores triplas, quadruplas, com nomes definidos ou níveis de cinza.
Exemplo
import matplotlib.pyplot as plt
from numpy.random import randn, rand

a = randn(100, 2)

plt.scatter(a[:,0], a[:,1], color = '1.0', edgecolor = '0.0')

plt.show()
O exemplo acima deve resulta num gráfico parecido com esse:


Nesse exemplo, passamos o valor do parâmetro edgecolor em níveis de cinza. Mas você poderia usar outros modos para definir a cor da borda dos pontos.
Uma coisa importante de se notar é que o parâmetro edgecolor só existe na função scatter.

quarta-feira, 29 de abril de 2020

Definindo cores com Matplotlib

Definindo cores com Matplotlib

Introdução

Muitos dos nossos exemplos, até aqui, não precisamos definir as cores presentes nos gráficos. Isso foi possível porque a biblioteca matplotlib já tem uma definição de cores padrão para alguns elementos. Mas não é por que existe uma grade de cores definida como padrão que não é possível alterar esses valores. A biblioteca matplotlib é muito flexível nesse quesito. Permitindo que novas cores sejam adicionadas ao projeto.

Definindo cores

As cores padrões usadas pela biblioteca matplotlib são um pouco neutras. São cores que não saltam aos olhos. E talvez seja exatamente isso que você queira, ou talvez não. Como numa apresentação de dados na sua reunião. Nessas situações é possível que você queira chamar mais atenção para um dado especifico. Ou talvez esses dados não sejam muitos animadores e você precisa tirar o foco desses dados. Seja como for a escolha de cores é uma tarefa muito importante na criação de gráficos. E a matplotlib te fornece total liberdade para escolher as cores.

Mãos a obra...

Com a biblioteca matplotlib é possível escolher as cores do gráfico de varias formas diferentes, veja algumas delas:
  • Três cores: A cor é formada pela mistura de três cores: o vermelho, o verde e o azul. É quase a mesma coisa que o RGB, com uma diferença: o valor de cada cor deve variar de 0.0 até 1.0 e não de 0 até 255. Por exemplo, para ter a cor vermelha os valores devem ser 1.0, 0.0 e 0.0.
  • Quatro cores: Definir uma cor com quatro cores é do mesmo jeito que definimos uma com três cores. A diferença é o alfa, que define a transparência da cor. Para definir um azul transparente, usaríamos quatro valores: vermelho, verde, azul e alfa. Por exemplo, 0.0, 0.0, 1.0, 0.5.
  • Nomes definidos: Na biblioteca matplotlib, algumas cores têm uma string definida ou um alias. Assim podemos passar o nome dessa cor e a biblioteca vai entender que queremos essa cor especifica. Por exemplo, passando a string red a biblioteca vai entender que queremos que nosso gráfico tenha a cor vermelha. Veja alguns alias de cores padrões:

  • AliasCores
    rVermelho
    gVerde
    bAzul
    cCiano
    mMangenta
    yAmarelo
    kPreto
    wBranco

  • Nível de cinza: Com o nível de cinza você só precisa passar uma string entre 1 e 0. Quanto mais perto do um o valor for mais claro é o cinza e quanto mais perto do zero mais escuro é.

Como definir cores do gráfico

As cores do gráfico são definidas no parâmetro color da função que vai desenhar o objeto.
Exemplo
import matplotlib.pyplot as plt

x = [10, 20, 30, 40, 50]
y1 = [10, 20, 30, 40, 50]
y2 = [10, 30, 20, 53, 35]
y3 = [10, 22, 29, 43, 49]
y4 = [16, 23, 27, 32, 41]

# três cores
plt.plot(x, y1, color = (.76, .12, .98))
# quatro cores
plt.plot(x, y2, color = (.76, .87, .12, .5))
# nome definido
plt.plot(x, y3, color = 'b')
# nível de cinza
plt.plot(x, y4, color = '.75')

plt.show()
A execução desse código deve resulta num gráfico igual á esse:

Como funciona o parâmetro color

O parâmetro color define a cor do objeto desenhado segundo o valor que ele recebe. Esse valor pode ser com três cores, quatro cores, nomes definidos ou níveis de cinza.


terça-feira, 28 de abril de 2020

Triangulação com a biblioteca Matplotlib

Triangulação com a biblioteca Matplotlib


A triangulação surge quando temos três ou mais pontos num plano. Ela pode ser usada para indicar relação entre dados ou coordenadas. Essa relação é indicada por uma linha, que com três coordenas ou mais formão triângulos. Muitas áreas fazem uso da triangulação, como é o caso da geometria e investigação. Na geometria a triangulação é usada na subdivisão de um objeto geométrico em simplexos. Nas investigações a triangulação é usada para tentar achar uma ligação entre fatos ou pistas. E como não podia ser diferente, a biblioteca matplotlib fornece funções para a triangulação em gráficos.

Como fazer gráficos com triangulação

A função triplot é usada para criar um gráfico com triangulação.
Exemplo
import matplotlib.pyplot as plt
import matplotlib.tri as tri

x = [2, 4, 8, 5, 6, 8]
y = [5, 18, 16, 14, 8, 10]

triangulos = tri.Triangulation(x, y)

plt.triplot(triangulos)
plt.show()
O código a cima vai produzir um gráfico como esse:

Como funciona…

Para criar um gráfico com triangulação precisamos informar as coordenadas x e y de cada ponto para a função Triangulation. A função Triangulation retorna um objeto que será usado pela função triplot para desenhar o gráfico com as coordenadas informadas. Note que cada novo ponto se conecta com pelo menos três outros pontos, criando mais triangulos.

segunda-feira, 27 de abril de 2020

Boxplot com Matplotlib

Boxplot com Matplotlib


Boxplot ou diagrama de caixa é uma ferramenta utilizada para identificar o maior e menor valor, mediana e quartis de um conjunto de dados. Em estatística descritiva, o diagrama de caixa, é uma ferramenta gráfica para representar a variação de dados observados de uma variável numérica por meio de quartis.

Como fazer um diagrama de caixa com matplotlib

A função utilizada para fazer um diagrama de caixa, com matplotlib, é a boxplot. Essa função recebe uma lista, da qual, se deseja saber o valor mínimo, máximo, mediana e quartis.
Nesse exemplo vamos usar uma lista ordenada, apenas para facilitar o entendimento. Listas desordenadas também podem ser usadas (a função boxplot ordena os elementos da lista).
Exemplo
import matplotlib.pyplot as plt

data = [52, 59, 67, 73, 73, 74, 77, 84, 85, 92, 96]

plt.boxplot(data)
plt.show()
Com a execução desse código, o gráfico apresentado deve ser igual a esse:

Como a função boxplot funciona

A função boxplot monstra um gráfico onde é possível ver os valores mínimos e máximos, mediana e quartis.
Para perceber isso note as duas linhas que saem da caixa. A linha que vai para cima, essa representa o valor máximo (96). A linha que vai para baixo, representa o valor mínimo (52). E a linha laranja, representa a mediana (A mediana é o número que fica no meio dos elementos: 74).
Os quartis são os números que ficam no meio dos meios. Por exemplo, peque a lista acima e divida ao meio em duas partes (Esqueça a mediana). A primeira parte vai ficar com os elementos 52, 59, 67, 73, 73. Com esse resultado já podemos descobrir qual é o primeiro quartis: 67. Do mesmo modo descobrimos que o terceiro quartis (a mediana é o segundo ;D) é 85.
As partes debaixo e de cima da caixa representam os quartis inferior e o superior, respectivamente.
Se você observou bem o gráfico percebeu que a parte superior da caixa fica exatamente no valor 85 (quartis superior). E que a parte de baixo ficou no número 70 e não no 67. Isso acontece porque o número subsequente desse quartis é muito discrepante. Quando isso acontece a função plotbox faz uma média entre o quartis inferior (67) e o número subsequente (73). Por isso a parte de baixo da caixa esta no 70. Por que a média entre 67 e 73 é 70. Para mudar isso tente trocar o número 73 por um mais próximo do 67.

Tem mais...

Se você precisar criar um gráfico com mais diagramas de caixa é só passar uma lista contendo listas para a função boxplot.
Exemplo
import matplotlib.pyplot as plt

data = [[52, 59, 67, 73, 73, 74, 77, 84, 85, 92, 96],
        [64, 65, 67, 69, 73, 74, 77, 84, 85, 92, 96],
        [56, 45, 87, 23, 49, 76, 23, 12, 185, 98, 1]]

plt.boxplot(data)
plt.show()
O gráfico desse exemplo deve ficar assim:

O circulo em cima do terceiro boxplot é usado para representar um valor muito fora da curva.

Histograma com Matplotlib

Histograma com Matplotlib


Um histograma é uma distribuição de dados em forma de linhas ou barras. É muito utilizado para acompanhar a evolução de dados. Como a produção de alimentos em períodos do ano, o número de alunos matriculados, o consumo de combustíveis fosseis, entre outras coisas.
Visualmente um histograma é um gráfico com barras. Então porque não usar a função para a criação de barras do matplotlib? Porque a biblioteca matplotlib tem uma função especifica para a criação de histogramas. E a criação de histogramas com essa função torna o trabalho mais fácil.

Como fazer um histograma com a biblioteca Matplotlib

A função usada para fazer um histograma, com a biblioteca matplotlib, é a hist. Para o nosso exemplo vamos criar alguns valores aleatórios.
Exemplo
import matplotlib.pyplot as plt
from random import randint

dados = []
for i in range(100):
dados.append(randint(0, 9))

plt.hist(dados, bins = 20)
plt.show()
Executando o código acima o resultado deve ser parecido com esse (lembre-se que os valores são aleatórios):

Como a função hist funciona

A função hist, nesse exemplo, recebe dois argumentos. O primeiro é uma lista contendo cem números repetidos com valores entre 0 e 9. E o segundo é o número de colunas que o histograma deve ter.
A função hist agrupa os números repetidos e cria uma coluna com a altura/valor igual ao numero de elementos repetidos para cada grupo de elementos. Como o nosso histograma tem dez grupos e vinte colunas, fica um espaço entre as colunas.
Os elementos são ordenados de forma crescente, da esquerda para a direita. Assim sendo a primeira coluna informa a quantidade de números zero na lista dados. E a última coluna informa a quantidade de números nove na lista dados. Agora ficou fácil perceber que a função hist agrupa elementos iguais e mostra a quantidade desse elemento.

Tem mais…

Se o número de colunas, que o histograma deve ter for menor que o número de grupos, os grupos serão agrupados. Por exemplo, existem dez grupos (números de 0 a 9) e apenas cinco colunas: Os dois primeiros grupos (0 e 1) serão agrupados e assim sucessivamente. Assim se o primeiro grupo (0) tem cinco elementos e o segundo (1) tem dois elementos, a primeira coluna do histograma vai ter o valor/altura igual a sete.

domingo, 26 de abril de 2020

Gráfico em pizza com Matplotlib

Gráfico em pizza com Matplotlib

Os gráficos em formato de pizza, ou circular. É um gráfico fácil de compreender. Geralmente os dados, de um gráfico circular, é usado para representar uma porção de um todo. Como por exemplo, quantos por cento da população brasileira sabe inglês? Ou quantas pessoas gostam de café?
Expressar esses dados em forma de barra tornaria mais difícil a compreensão dos dados. Já com o gráfico em formato de pizza os seus dados são compreendidos quase que instantaneamente (pelo menos com dados muito discrepantes). Isso acontece porque os dados de um gráfico em pizza são representações de partes de um todo, e não um valor absoluto. Por isso o gráfico em pizza é usado para apresentar valores que fazem parte de um conjunto.

Como fazer um gráfico em formato de pizza

Para poder criar um gráfico em forma de pizza, a biblioteca matplotlib fornece a função pie.
Veja um exemplo abaixo do uso da função pie:
Exemplo
import matplotlib.pyplot as plt

dados = [32, 25, 18, 25]

plt.pie(dados)
plt.show()
A execução do código acima deve resultar num gráfico parecido com esse:

Como funciona a função pie da biblioteca matplotlib

A função pie recebe uma lista com os dados dos gráfico e calcula a área de cada dado. A lista poderia ser substituída por uma tupla ou um array da biblioteca numpy. O que você precisa prestar atenção é nos valores passados. A soma de todos os elementos da lista deve ser igual a cem. Se o valor da soma de todos os elementos da lista for menor que cem, uma fatia do gráfico ficará maior do que deveria.