Gráficos
Criando Gráficos
Para criar gráficos usando Python, você pode utilizar diversas bibliotecas. Existem várias bibliotecas em Python que são amplamente utilizadas:
- Matplotlib: É uma biblioteca bastante popular para visualização de dados em Python. Ela oferece uma ampla gama de gráficos, desde gráficos simples de linha, barra e dispersão até gráficos mais avançados como gráficos de contorno, histogramas e gráficos em 3D.
- Seaborn: É uma biblioteca baseada no Matplotlib que fornece uma interface de alto nível para criação de gráficos estatísticos atraentes e informativos. Seaborn é conhecido por sua capacidade de criar gráficos estatísticos complexos de forma fácil e eficiente.
- Plotly: É uma biblioteca interativa e de código aberto que permite criar gráficos interativos e visualizações de dados. O Plotly suporta uma ampla gama de tipos de gráficos, incluindo gráficos de barras, dispersão, linha, área, caixa, histograma e muito mais. Também oferece recursos interativos, como zoom, pan, dicas de ferramentas (tooltips) e botões interativos.
- Bokeh: É outra biblioteca de visualização interativa que se destaca pela criação de gráficos interativos em um navegador da web. O Bokeh permite criar gráficos complexos, interativos e responsivos, além de oferecer suporte à criação de painéis de controle e dashboards interativos.
- Plotnine: É uma biblioteca baseada no pacote ggplot2 do R, que segue a gramática de gráficos, permitindo criar gráficos estatísticos sofisticados em Python. O Plotnine é ideal para quem está familiarizado com a sintaxe do ggplot2 e deseja criar gráficos semelhantes em Python.
No site de cada biblioteca há tutoriais, referencias, ‘cheat sheets’, documentação e muito mais:
Essas são apenas algumas das principais bibliotecas de Python para criação de gráficos. Cada uma delas tem suas características e recursos específicos, portanto, a escolha da biblioteca dependerá das suas necessidades e preferências.
Abaixo mostramos exemplos básicos utilizando a biblioteca Matplotlib, uma das mais populares para criação de gráficos:
import matplotlib.pyplot as plt
Temos que preparar os dados para serem plotados nos gráficos.
Podemos criar duas listas ou arrays representando os valores de x e y para nosso gráfico
x = [1, 2, 3, 4, 5]
y = [3, 5, 2, 7, 1]
Então, podemos criar um gráfico básico de linha:
plt.plot(x, y)
Podemos adicionar rótulos e título ao gráfico
plt.xlabel('Eixo X')
plt.ylabel('Eixo Y')
plt.title('Meu Gráfico')
E por fim, exibir o gráfico
plt.show()
Podemos exibir mais de um gráfico, criando subplots.
Abaixo, “fig” é figure (tudo que é apresentado) e “ax” de eixos.
fig, ax = plt.subplots()
ax.plot(df1['coluna1'], df1['coluna2'])
ax.plot(df2['coluna1', df2['coluna2']])
plt.show()
Costumizando
#colocar pontos no grafico
ax.plot(df1['coluna1'], df1['coluna2'], marker = 'o')
# o argumento "marker" informa como queremoso formato dos pontos no g´rafico, por exemplo: 'o' usa circulos e 'v' usa triangulos
#Alterar as linhas
ax.plot(df1['coluna1'], df1['coluna2'], linestyle = '--')
# o argumento "linestyle" informa como queremos as linhas do gráfico 'None' ':' '-.' '--' '-'
#Alterar cor
ax.plot(df1['coluna1'], df1['coluna2'], color ='r')
# o argumento "color" informa a cor que queremos, podemos usar por exemplo 'r' de red
#Alterar nome dos eixos
ax.set_xlabel('Nome do eixo x')
ax.set_ylabel('Nome do eixo y')
ax.set_title('Nome do titulo')
Adicionando mais dados
#As vezes add muitos dados prejudica o gráfico, então temos subplot
##Cria uma grade de gráficos (ex: 3 linhas x 2 colunas)
fig, ax = plt.subplots(3,2)
Para adicionar os dados, precisamos chamar os dados por posição
ax[0, 0].plot(df['coluna1'],
df['coluna2'],
color='b'])
#Caso tenha apenas 1 linha ou 1 coluna
fig, ax = plt.subplots(3,2)
ax[0].plot(df['coluna1'],
df['coluna2'],
color='b'])
ax[1].plot(df['coluna1'],
df['coluna2'],
color='b'])
ax[0].set_ylabel('Eixo')
ax[1].set_ylabel('Eixo')
ax[1].set_xlabel('Eixo')
Como são 2 linhas x 1 coluna, precisamos de 2 titulos eixo y e 1 eixo x
#Colocar todos os gráficos no mesmo range
fig, ax = plt.subplots(3,2, sharey=True)
Gráfico de barras
fig, ax = plt.subplots()
ax.bar(df.index, df['coluna'])
#Exemplo
pacientes = ['paciente1', 'paciente2', 'paciente3', 'paciente4']
ferritina = [90, 153, 458, 37]
ax.bar(pacientes, ferritina)
#Exibir o gráfico
plt.show()
#Arrumar os labels
ax.set_xticklabels(df.index, rotation = 90)
Adicionando mais dados
ax.bar(df.index, df['coluna1'])
ax.bar(df.index, df['coluna2'], bottom=df['coluna1'])
ax.bar(df.index, df['coluna2'], bottom=df['coluna1'] + df['coluna3'])
ax.set_xticklabels(df.index, rotation = 90)
ax.set_ylabel('Eixo y')
ax.bar(df.index, df['coluna1'], label = 'nome')
ax.bar(df.index, df['coluna2'], bottom=df['coluna1'], label = 'nome2')
ax.bar(df.index, df['coluna3'], bottom=df['coluna1'] + df['coluna2'], label = 'nome3')
ax.set_xticklabels(df.index, rotation = 90)
ax.set_ylabel('Eixo y')
ax.legend()
#Exemplo
plt.xlabel('Pacientes')
plt.ylabel('Ferritina')
plt.title('Nível de Ferritina nos Pacientes')
#Exibir o gráfico
plt.show()
Histogramas
ax.hist(df['coluna1'], label = 'Coluna')
ax.hist(df['coluna2'], label = 'Coluna2')
ax.set_xlabel('Eixo X')
ax.set_ylabel('Eixo y')
ax.legend()
plt.show()
ax.hist(df['coluna1'], label = 'Coluna', bins=5)
ax.hist(df['coluna2'], label = 'Coluna2', bins=5)
ax.set_xlabel('Eixo X')
ax.set_ylabel('Eixo y')
ax.legend()
plt.show()
ax.hist(df['coluna1'], label = 'Coluna1', bins=[5, 10, 15, 20])
ax.hist(df['coluna2'], label = 'Coluna2', bins=[5, 10, 15, 20])
ax.set_xlabel('Eixo X')
ax.set_ylabel('Eixo y')
ax.legend()
plt.show()
ax.hist(df['coluna1'], label = 'Coluna1', bins=[5, 10, 15, 20], histtype = 'step')
ax.hist(df['coluna2'], label = 'Coluna2', bins=[5, 10, 15, 20], histtype = 'step')
Barra de Erro
fig, ax = plt.subplots()
ax.bar('Nova_coluna',
df['coluna1'].mean()
yerr=df['coluna1'].std())
ax.bar('Nova_coluna2',
df['coluna2'].mean()
yerr=df['coluna2'].std())
ax.set_ylabel('Eixo y')
plt.show()
Boxplot
ax.boxplot([df['coluna1'], df['coluna2']])
ax.set_xticklabels(['nome', 'nome2'])
ax.set_ylabel('Eixo y')
plt.show()
#Média = linha que aparece no meio A caixa é a distancia interquartilica (entre 25 e 75) Risco é o IC de 95 Outlier = Pontos que aparecem fora
Scatterplot
fig, ax = plt.subplots()
ax.scatter([df['coluna1'], df['coluna2']])
x = df['data1':'data2']
y = df['data1':'data2']
ax.scatter(vr1['Coluna1'], vr1['colouna2'], color='red', label='x')
ax.scatter(vr2['Coluna1'], vr2['colouna2'], color='blue', label='y')
ax.legend()
ax.set_xlabel('Eixo x')
ax.set_ylabel('Eixo y')
plt.show()
ax.scatter(df['Coluna1'], df['colouna2'], c=df.index)
ax.set_xlabel('Eixo x')
ax.set_ylabel('Eixo y')
plt.show()
Manipulando Desing
#Usar ggplot altera todo o desing do gráfico
plt.style.use('ggplot')
fig, ax = plt..subplots()
ax.plot(df['coluna1'], df['coluna2'])
ax.plot(df2['coluna1'], df2['coluna2'])
ax.set_xlabel('Eixo x')
ax.set_ylabel('Eixo y')
plt.show()
#Voltar ao padrão
plt.style.use('default')
#Alguns modelos
plt.style.use('ggplot')
plt.style.use('bmh')
plt.style.use('seaborn-colorblind')
#Tamanho
fig.set_size_inches([5,3])
Optimizando os gráficos
Podemos criar “functions“, que são blocos de código reutilizáveis que executam uma determinada tarefa. Elas são usadas para organizar o código, melhorar a legibilidade, evitar repetições e facilitar a manutenção do programa.
def plot_timeseries(axes, x,y, color, xlabel, ylabel):
axes.plot(x, y, color=color)
axes.set_xlabel(xlabel)
axes.set_ylabel(ylabel, color=color)
axes.tick_params('y', colors=color)
plot_timeseries(ax, df.index, df['coluna1', 'red', 'EixoX', 'EixoY1'])
ax2 = ax.twinx()
plot_timeseries(ax, df.index, df['coluna2', 'blue', 'EixoX', 'EixoY2'])