Pular para o conteúdo principal
InicioTutoriaisPython

Tutorial do Python Seaborn Line Plot: Criar visualizações de dados

Descubra como usar o Seaborn, uma biblioteca popular de visualização de dados em Python, para criar e personalizar gráficos de linha em Python.
abr. de 2024  · 12 min leer

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:

Gráfico de linha única de Seaborn com gráfico de linha

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:

Gráfico de linha única Seaborn com relplot

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:

Gráfico de linha única de Seaborn - tamanho da figura ajustado com relplot

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:

Gráfico de Seaborn.png

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:

Gráfico de linha única de Seaborn - título e rótulos de eixo adicionados

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:

Gráfico de linha única de Seaborn - tamanho da fonte ajustado

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:

Gráfico de linha única de Seaborn - linha personalizada

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:

Gráfico de linha única de Seaborn - marcadores adicionados e personalizados

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:

Gráfico de linhas múltiplas de Seaborn - objetos de eixos separados para variáveis dependentes

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:

Gráfico de várias linhas de Seaborn usando hue

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:

Gráfico de várias linhas de Seaborn usando estilo

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:

Gráfico de linhas múltiplas de Seaborn usando o tamanho

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:

Gráfico de linhas múltiplas de Seaborn - ajustes gerais

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:

Gráfico de várias linhas do Seaborn usando matiz e fornecendo uma paleta personalizada

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:

Gráfico de várias linhas de Seaborn usando matiz e fornecendo uma paleta padrão

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:

Gráfico de várias linhas do Seaborn usando hue - estilo de linha, cor e largura ajustados

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:

Gráfico de várias linhas do Seaborn usando estilo e fornecendo um padrão personalizado

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:

Gráfico de várias linhas do Seaborn usando estilo - estilo, cor e largura da linha ajustados

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:

Gráfico de várias linhas do Seaborn usando o tamanho e fornecendo larguras de linha personalizadas

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:

Gráfico de várias linhas do Seaborn usando o tamanho - estilo, cor e largura da linha ajustados

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:

Gráfico de várias linhas do Seaborn com marcadores da mesma cor, estilo e tamanho

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:

Gráfico de linhas múltiplas de Seaborn com marcadores de diferentes estilos

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:

Gráfico de várias linhas de Seaborn com linhas sólidas e marcadores de diferentes estilos

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.

Temas
Relacionado

tutorial

Introdução à plotagem com Matplotlib em Python

Este tutorial demonstra como usar o Matplotlib, uma poderosa biblioteca de visualização de dados em Python, para criar gráficos de linha, barra e dispersão com dados do mercado de ações.

Kevin Babitz

25 min

tutorial

Gráficos de linhas no MatplotLib com Python

Este tutorial prático se aprofunda na criação e na personalização de gráficos de linhas com o Matplotlib, uma biblioteca avançada de visualização de dados em Python.
Arunn Thevapalan's photo

Arunn Thevapalan

11 min

tutorial

Gráfico de linha de série temporal do Matplotlib

Este tutorial explora como criar e personalizar gráficos de linha de séries temporais no matplotlib.
Elena Kosourova's photo

Elena Kosourova

8 min

tutorial

Histogramas no Matplotlib

Aprenda sobre histogramas e como você pode usá-los para obter insights dos dados com a ajuda do matplotlib.
Aditya Sharma's photo

Aditya Sharma

8 min

tutorial

Guia passo a passo para criar mapas em Python usando a biblioteca Plotly

Faça seus dados se destacarem com mapas impressionantes criados com Plotly em Python
Moez Ali's photo

Moez Ali

7 min

tutorial

Introdução ao t-SNE

Aprenda a visualizar dados de alta dimensão em um espaço de baixa dimensão usando uma técnica de redução de dimensionalidade não linear.
Abid Ali Awan's photo

Abid Ali Awan

14 min

See MoreSee More