Um gráfico de linhas é uma visualização de dados relacionais que mostra como uma variável contínua muda quando outra muda. É um dos gráficos mais comuns, amplamente utilizado em finanças, vendas, marketing, saúde, ciências naturais e muito mais.
Neste tutorial, discutiremos como usar o Seaborn, uma biblioteca popular de visualização de dados em Python, para criar e personalizar gráficos de linha em Python.
Apresentando o conjunto de dados
Para ter algo em que praticar os gráficos de linhas de origem marinha, primeiro faremos o download de um conjunto de dados do Kaggle chamado Daily Exchange Rates per Euro 1999-2023. Em seguida, importaremos todos os pacotes necessários, leremos e limparemos o dataframe. Sem entrar em detalhes sobre o processo de limpeza, o código abaixo demonstra as etapas a serem executadas:
import seaborn as sns
import matplotlib.pyplot as plt
import pandas as pd
df = pd.read_csv('euro-daily-hist_1999_2022.csv')
df = df.iloc[:, [0, 1, 4, -2]]
df.columns = ['Date', 'Australian dollar', 'Canadian dollar', 'US dollar']
df = pd.melt(df, id_vars='Date', value_vars=['Australian dollar', 'Canadian dollar', 'US dollar'], value_name='Euro rate', var_name='Currency')
df['Date'] = pd.to_datetime(df['Date'])
df = df[df['Date']>='2022-12-01'].reset_index(drop=True)
df['Euro rate'] = pd.to_numeric(df['Euro rate'])
print(f'Currencies: {df.Currency.unique()}\n')
print(df.head())
print(f'\n{df.Date.dt.date.min()}/{ df.Date.dt.date.max()}')
Saída:
Currencies: ['Australian dollar' 'Canadian dollar' 'US dollar']
Date Currency Euro rate
0 2023-01-27 Australian dollar 1.5289
1 2023-01-26 Australian dollar 1.5308
2 2023-01-25 Australian dollar 1.5360
3 2023-01-24 Australian dollar 1.5470
4 2023-01-23 Australian dollar 1.5529
2022-12-01/2023-01-27
O dataframe resultante contém taxas diárias (dias úteis) de euro para dólares australianos, canadenses e americanos para o período de 01.12.2022 a 27.01.2023, inclusive.
Agora, estamos prontos para mergulhar na criação e na personalização dos gráficos de linha de origem marinha do Python.
Noções básicas de plotagem da linha Seaborn
Para criar um gráfico de linhas no Seaborn, podemos usar uma das duas funções: lineplot()
ou relplot()
. Em geral, eles têm muitas funcionalidades em comum, além de nomes de parâmetros idênticos. A principal diferença é que relplot() nos permite criar gráficos de linhas com várias linhas em diferentes facetas. Em vez disso, o lineplot() permite trabalhar com intervalos de confiança e agregação de dados.
Neste tutorial, usaremos principalmente a função lineplot().
O curso Introduction to Data Visualization with Seaborn o ajudará a aprender e praticar as principais funções e métodos da biblioteca seaborn. Você também pode conferir nosso tutorial do Seaborn para iniciantes para se familiarizar mais com a popular biblioteca Python.
Criação de um único gráfico de linha de origem marinha
Podemos criar um gráfico de linhas mostrando as relações entre duas variáveis contínuas da seguinte forma:
usd = df[df['Currency']=='US dollar'].reset_index(drop=True)
sns.lineplot(x='Date', y='Euro rate', data=usd)
Saída:
O gráfico acima mostra a dinâmica da taxa EUR-USD. Definimos as variáveis a serem plotadas nos eixos x e y (os parâmetros x e y ) e o dataframe (dados) de onde retiramos essas variáveis.
Para fins de comparação, para criar o mesmo gráfico usando relplot(), escreveríamos o seguinte:
sns.relplot(x='Date', y='Euro rate', data=usd, kind='line')
Saída:
Nesse caso, passamos mais um argumento específico para a função relplot(): kind='line'. Por padrão, essa função cria um gráfico de dispersão.
Personalização de um único gráfico de linha de origem marinha
Podemos personalizar o gráfico acima de várias maneiras para torná-lo mais legível e informativo. Por exemplo, podemos ajustar o tamanho da figura, adicionar rótulos de título e de eixo, ajustar o tamanho da fonte, personalizar a linha, adicionar e personalizar marcadores, etc. Vamos ver como implementar esses aprimoramentos no seaborn.
Ajuste do tamanho da figura
Como o Seaborn foi desenvolvido com base no matplotlib, podemos usar o matplotlib.pyplot para ajustar o tamanho da figura:
fig = plt.subplots(figsize=(20, 5))
sns.lineplot(x='Date', y='Euro rate', data=usd)
Saída:
Em vez disso, com relplot(), podemos usar os parâmetros de altura e aspecto (a proporção entre largura e altura) para a mesma finalidade:
sns.relplot(x='Date', y='Euro rate', data=usd, kind='line', height=6, aspect=4)
Saída:
Adição de um título e rótulos de eixo
Para adicionar um título de gráfico e rótulos de eixo, podemos usar a função set() no objeto de gráfico de linha seaborn passando os argumentos title, xlabel e ylabel:
fig = plt.subplots(figsize=(20, 5))
sns.lineplot(x='Date', y='Euro rate', data=usd).set(title='Euro-USD rate', xlabel='Date', ylabel='Rate')
Saída:
Ajuste do tamanho da fonte
Uma maneira conveniente de ajustar o tamanho da fonte é usar a função set_theme() e experimentar diferentes valores do parâmetro font_scale:
fig = plt.subplots(figsize=(20, 5))
sns.lineplot(x='Date', y='Euro rate', data=usd).set(title='Euro-USD rate', xlabel='Date', ylabel='Rate')
sns.set_theme(style='white', font_scale=3)
Saída:
Observe que também adicionamos style='white' para evitar substituir o estilo inicial.
Alterar a cor, o estilo e o tamanho da linha
Para personalizar a linha do gráfico, podemos passar alguns parâmetros opcionais em comum com matplotlib.pyplot.plot, como cor, estilo de linha ou largura de linha:
fig = plt.subplots(figsize=(20, 5))
sns.lineplot(x='Date', y='Euro rate', data=usd, linestyle='dotted', color='magenta', linewidth=5).set(title='Euro-USD rate', xlabel='Date', ylabel='Rate')
sns.set_theme(style='white', font_scale=3)
Saída:
Adicionar marcadores e personalizar sua cor, estilo e tamanho
É possível adicionar marcadores na linha e personalizar sua aparência. Além disso, nesse caso, podemos usar alguns parâmetros do matplotlib, como marker, markerfacecolor ou markersize:
fig = plt.subplots(figsize=(20, 5))
sns.lineplot(x='Date', y='Euro rate', data=usd, marker='*', markerfacecolor='limegreen', markersize=20).set(title='Euro-USD rate', xlabel='Date', ylabel='Rate')
sns.set_theme(style='white', font_scale=3)
Saída:
A documentação nos fornece a lista definitiva dos parâmetros a serem usados para melhorar a estética de um gráfico de linha de origem marinha. Em particular, podemos ver todas as opções possíveis de marcadores.
Em nossa folha de dicas do Seaborn, você encontrará outras maneiras de personalizar um gráfico de linhas no Seaborn.
Gráficos de linhas Seaborn com várias linhas
Muitas vezes, precisamos explorar como diversas variáveis contínuas mudam dependendo de outra variável contínua. Para essa finalidade, podemos criar um gráfico de linha de fundo do mar com várias linhas. As funções lineplot() e relplot() também são aplicáveis a esses casos.
Criação de um gráfico de linhas de mar com várias linhas
Tecnicamente, é possível criar um gráfico de linhas com várias linhas apenas construindo um objeto de eixos separado para cada variável dependente, ou seja, cada linha:
aud = df[df['Currency']=='Australian dollar'].reset_index(drop=True)
cad = df[df['Currency']=='Canadian dollar'].reset_index(drop=True)
sns.lineplot(x='Date', y='Euro rate', data=usd)
sns.lineplot(x='Date', y='Euro rate', data=aud)
sns.lineplot(x='Date', y='Euro rate', data=cad)
Saída:
Acima, extraímos mais dois subconjuntos do nosso dataframe inicial df - para dólares australianos e canadenses - e plotamos cada taxa do euro em relação ao tempo. No entanto, há soluções mais eficientes para isso: usar os parâmetros de matiz, estilo ou tamanho, disponíveis em lineplot() e relplot().
Usando o parâmetro de matiz
Esse parâmetro funciona da seguinte forma: atribuímos a ele o nome de uma coluna de dataframe que contém valores categóricos e, em seguida, o seaborn gera um gráfico de linhas para cada categoria, dando uma cor diferente a cada linha:
sns.lineplot(x='Date', y='Euro rate', data=df, hue='Currency')
Saída:
Com apenas uma linha de código simples, criamos um gráfico de linha de origem marinha para três categorias. Observe que passamos o dataframe inicial df em vez de seus subconjuntos para diferentes moedas.
Usando o parâmetro de estilo
O parâmetro style funciona da mesma forma que o hue, mas distingue as categorias usando diferentes estilos de linha (sólida, tracejada, pontilhada etc.), sem afetar a cor:
sns.lineplot(x='Date', y='Euro rate', data=df, style='Currency')
Saída:
Usando o parâmetro de tamanho
Assim como a tonalidade e o estilo, o parâmetro de tamanho cria uma linha separada para cada categoria. Isso não afeta a cor e o estilo das linhas, mas faz com que cada uma delas tenha uma largura diferente:
sns.lineplot(x='Date', y='Euro rate', data=df, size='Currency')
Saída:
Personalização de um gráfico de linhas de origem marinha com várias linhas
Vamos agora experimentar a estética do nosso gráfico. Algumas técnicas aqui são idênticas às que aplicamos a um único gráfico de linha de Seaborn. Os outros são específicos apenas para gráficos de linhas com várias linhas.
Ajustes gerais
Podemos ajustar o tamanho da figura, adicionar um título e rótulos de eixo e alterar o tamanho da fonte do gráfico acima da mesma forma que fizemos para um gráfico de linha única:
fig = plt.subplots(figsize=(20, 5))
sns.lineplot(x='Date', y='Euro rate', data=df, hue='Currency').set(title='Euro rates for different currencies', xlabel='Date', ylabel='Rate')
sns.set_theme(style='white', font_scale=3)
Saída:
Alterar a cor, o estilo e o tamanho de cada linha
Anteriormente, vimos que, quando os parâmetros de matiz, estilo ou tamanho são usados, o seaborn fornece um conjunto padrão de cores/estilos/tamanhos para um gráfico de linhas com várias linhas. Se necessário, podemos substituir esses padrões e selecionar cores/estilos/tamanhos por nós mesmos.
Quando usamos o parâmetro hue, também podemos passar o argumento palette como uma lista ou tupla de nomes de cores do matplotlib:
fig = plt.subplots(figsize=(20, 5))
sns.lineplot(x='Date', y='Euro rate', data=df, hue='Currency', palette=['magenta', 'deepskyblue', 'yellowgreen']).set(title='Euro rates for different currencies', xlabel='Date', ylabel='Rate')
sns.set_theme(style='white', font_scale=3)
Saída:
Também é possível aplicar diretamente uma paleta matplotlib existente:
fig = plt.subplots(figsize=(20, 5))
sns.lineplot(x='Date', y='Euro rate', data=df, hue='Currency', palette='spring').set(title='Euro rates for different currencies', xlabel='Date', ylabel='Rate')
sns.set_theme(style='white', font_scale=3)
Saída:
Ao mesmo tempo, ao usar o hue, ainda podemos ajustar o estilo e a largura da linha de todas as linhas passando os argumentos linestyle e linewidth:
fig = plt.subplots(figsize=(20, 5))
sns.lineplot(x='Date', y='Euro rate', data=df, hue='Currency', palette=['magenta', 'deepskyblue', 'yellowgreen'], linestyle='dashed', linewidth=5).set(title='Euro rates for different currencies', xlabel='Date', ylabel='Rate')
sns.set_theme(style='white', font_scale=3)
Saída:
Em vez disso, quando criamos um gráfico de linhas com várias linhas usando o parâmetro style, podemos atribuir uma lista (ou uma tupla) de listas (ou tuplas) a um parâmetro chamado dashes:
fig = plt.subplots(figsize=(20, 5))
sns.lineplot(x='Date', y='Euro rate', data=df, style='Currency', dashes=[[4, 4], [6, 1], [3, 9]]).set(title='Euro rates for different currencies', xlabel='Date', ylabel='Rate')
sns.set_theme(style='white', font_scale=3)
Saída:
Na lista acima de listas atribuídas a traços, o primeiro item de cada sublista representa o comprimento de um segmento da linha correspondente, enquanto o segundo item representa o comprimento de um espaço.
Observação: para representar uma linha sólida, precisamos definir o comprimento de um intervalo como zero, por exemplo: [1, 0].
Para ajustar a cor e a largura de todas as linhas desse gráfico, fornecemos os argumentos color e linewidth, da mesma forma que fizemos ao personalizar um único gráfico de linha de origem marinha:
fig = plt.subplots(figsize=(20, 5))
sns.lineplot(x='Date', y='Euro rate', data=df, style='Currency', dashes=[[4, 4], [6, 1], [3, 9]], color='darkviolet', linewidth=4).set(title='Euro rates for different currencies', xlabel='Date', ylabel='Rate')
sns.set_theme(style='white', font_scale=3)
Saída:
Por fim, quando usamos o parâmetro size para criar um gráfico de linhas múltiplas de seaborn, podemos regular a largura de cada linha por meio do parâmetro sizes. Ele recebe uma lista (ou uma tupla) de números inteiros:
fig = plt.subplots(figsize=(20, 5))
sns.lineplot(x='Date', y='Euro rate', data=df, size='Currency', sizes=[2, 10, 5]).set(title='Euro rates for different currencies', xlabel='Date', ylabel='Rate')
sns.set_theme(style='white', font_scale=3)
Saída:
Para personalizar a cor e o estilo de todas as linhas desse gráfico, precisamos fornecer os argumentos linestyle e color:
fig = plt.subplots(figsize=(20, 5))
sns.lineplot(x='Date', y='Euro rate', data=df, size='Currency', sizes=[2, 10, 5], linestyle='dotted', color='teal').set(title='Euro rates for different currencies', xlabel='Date', ylabel='Rate')
sns.set_theme(style='white', font_scale=3)
Saída:
Adicionar marcadores e personalizar sua cor, estilo e tamanho
Talvez queiramos adicionar marcadores em nosso gráfico de linhas múltiplas de origem marinha.
Para adicionar marcadores da mesma cor, estilo e tamanho em todas as linhas, precisamos usar os parâmetros do matplotlib, como marker, markerfacecolor, markersize etc., da mesma forma que fizemos para um gráfico de linha única:
fig = plt.subplots(figsize=(20, 5))
sns.lineplot(x='Date', y='Euro rate', data=df, hue='Currency', marker='o', markerfacecolor='orangered', markersize=10).set(title='Euro rates for different currencies', xlabel='Date', ylabel='Rate')
sns.set_theme(style='white', font_scale=3)
Saída:
As coisas são diferentes, porém, quando queremos marcadores diferentes para cada linha. Nesse caso, precisamos usar o parâmetro markers, que, no entanto, de acordo com as funcionalidades do seaborn, só funciona quando o parâmetro style é especificado:
fig = plt.subplots(figsize=(20, 5))
sns.lineplot(x='Date', y='Euro rate', data=df, style='Currency', markers=['o', 'X', '*'], markerfacecolor='brown', markersize=10).set(title='Euro rates for different currencies', xlabel='Date', ylabel='Rate')
sns.set_theme(style='white', font_scale=3)
Saída:
No gráfico acima, podemos tornar todas as linhas sólidas fornecendo o argumento dos traços e definindo o padrão de estilo [1, 0] para cada linha:
fig = plt.subplots(figsize=(20, 5))
sns.lineplot(x='Date', y='Euro rate', data=df, style='Currency', markers=['o', 'X', '*'], dashes=[[1, 0], [1, 0], [1, 0]], markerfacecolor='brown', markersize=10).set(title='Euro rates for different currencies', xlabel='Date', ylabel='Rate')
sns.set_theme(style='white', font_scale=3)
Saída:
Conclusão
Recapitulando, neste tutorial, aprendemos várias maneiras de criar e personalizar um gráfico de linhas do Seaborn com uma ou várias linhas.
Como um caminho a seguir, com o seaborn, podemos fazer muito mais para ajustar ainda mais um gráfico de linha. Por exemplo, podemos:
- Agrupar linhas por mais de uma variável categórica
- Personalizar a legenda
- Criar gráficos de linhas com várias linhas em diferentes facetas
- Exibir e personalizar o intervalo de confiança
- Personalizar os ticks do eixo temporal e seus rótulos para um gráfico de linha de série temporal
Para se aprofundar no que e como pode ser feito com o seaborn, considere fazer nosso curso Intermediate Data Visualization with Seaborn.
Perguntas frequentes sobre o enredo da linha Seaborn
O que é um gráfico de linha na Seaborn?
Um gráfico de linhas é um tipo de gráfico no Seaborn que mostra a relação entre duas variáveis, conectando os pontos de dados com uma linha reta.
Que tipo de dados é mais adequado para um gráfico de linhas no Seaborn?
Os gráficos de linhas são mais adequados para dados em que há uma relação clara entre duas variáveis e em que as variáveis são contínuas ou ordinais.
Posso traçar várias linhas no mesmo gráfico no Seaborn?
Sim, você pode plotar várias linhas no mesmo gráfico no Seaborn usando o parâmetro hue
para especificar uma variável categórica para agrupar os dados.
Qual é a diferença entre um gráfico de linhas e um gráfico de dispersão no Seaborn?
Um gráfico de linhas no Seaborn mostra a relação entre duas variáveis com uma linha reta, enquanto um gráfico de dispersão mostra a relação com pontos de dados individuais.
Posso adicionar uma linha de regressão ao meu gráfico de linhas no Seaborn?
Sim, você pode adicionar uma linha de regressão ao seu gráfico de linhas no Seaborn usando a função regplot()
, que ajusta e plota um modelo de regressão linear entre duas variáveis.
Como faço para salvar meu gráfico de linhas do Seaborn em um arquivo?
Você pode salvar o gráfico de linhas do Seaborn em um arquivo usando a função savefig()
da biblioteca matplotlib
, que salva a figura atual em um caminho e formato de arquivo especificados.
tutorial
Introdução à plotagem com Matplotlib em Python
Kevin Babitz
25 min
tutorial
Gráficos de linhas no MatplotLib com Python
tutorial
Gráfico de linha de série temporal do Matplotlib
tutorial
Histogramas no Matplotlib
tutorial
Guia passo a passo para criar mapas em Python usando a biblioteca Plotly
tutorial