Przejdź do treści

#009 Wykres liniowy (line plot)

  • Wykresy
  • 3 min read

Wykres liniowy (ang. line plot/ line chart / line graph) jest jednym z najczęściej używanych wykresów na całym świecie, szczególnie w analizach ekonomicznych. Służy głównie do pokazywania trendów i analizowania zmian danych numerycznych w czasie.

Punkty danych połączone są ze sobą liniami prostymi na siatce współrzędnych. Wykres liniowy jest podobny do wykresu punktowego z tą różnicą, że pomiary są uporządkowane i połączone liniami. Bardzo często oś OY ma wartość ilościową a oś OX jest skalą czasu lub przedziałem, np. kolejne kwartały w roku. Warto, aby wartości ujemne były wyświetlane poniżej osi OX.

Wykres liniowy często jest używany do wizualizacji trendów danych, ponieważ pozwala na szybkie i intuicyjne rozeznanie się w występującej tendencji zmiennej względem czasu. Jak nachylenie rośnie w górę to wartości rosną, a gdy nachylenie spada to wartości maleją.

Dla przykładu poniżej liczba osób chorych na COVID-19 w Europie. Stąd można pobrać dane.

import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt 

# przygotowanie danych
df = pd.read_csv('../data/covid19.csv').sort_values(by=['countriesAndTerritories','year','month','day'])
df['date'] = pd.to_datetime(df[['year', 'month','day']])
df = df[df['date']>'2020-02-28']

df_con = df.groupby(['date','continentExp'])[['cases','deaths']].agg('sum').reset_index()

#wykres
plt.figure(figsize=(15,5))
sns.set_style("white")
ax = sns.lineplot(x='date', y='deaths', 
                  data=df_con[df_con['continentExp']=='Europe'], 
                  color='red')
ax.set_title(f'Dzienna liczba ofiar z powodu COVID-19 w Europie');
wykres liniowy - covid europe

Wykres liniowy można wykorzystać do przedstawienia jednej zmiennej (jak wyżej) lub kilku. Po zgrupowaniu kilku serii danych na jednym wykresie można je ze sobą szybko i łatwo porównać.

Dla przykładu:

df_con = df_con[(df_con['continentExp'] != 'Other') & \
                (df_con['continentExp'] != 'Oceania')]

plt.figure(figsize=(15,5))
sns.set_style("white")
ax = sns.lineplot(x='date', y='deaths', data=df_con, color='red', 
                  hue='continentExp')
ax.set_title(f'Dzienna liczba ofiar z powodu COVID-19');
wykres liniowy covid series

Warto zwrócić uwagę, że powyższy wykres będzie czytelny dla małej liczby zmiennych. Jeśli będzie ich zbyt wiele wówczas taka wizualizacja staje się po prostu nieczytelna i trudna do interpretacji. Często określa się ją wykresem „spaghetti”.

Można sobie poradzić z tym na różne sposoby. Najczęściej stosowanym rozwiązaniem jest podzielenie wykresu tak, aby jeden wykres liniowy odpowiadał jednej serii danych. Dodatkowo w tle można delikatnie zostawić pozostałe serie.

# przygotowanie danych
df_eu = df[df['continentExp']=='Europe']
countries = df_eu.groupby(['countriesAndTerritories'])['deaths'].agg('sum').reset_index() 
list_top16 = countries.sort_values(by=['deaths'], ascending=False)['countriesAndTerritories'].head(16).to_list()

#wykres
f, axs = plt.subplots(4,4,figsize=(15,10))

i = 1
for cntry in list_top16:
    plt.subplot(4, 4, i)
    
    for c in list_top16:
        df_tmp = df_eu[df_eu['countriesAndTerritories']==c]
        plt.plot(df_tmp['date'], df_tmp['deaths'], 
             color = 'gray', linewidth=0.5, alpha=0.5)
    
    df_tmp = df_eu[df_eu['countriesAndTerritories']==cntry]   
    plt.plot(df_tmp['date'], df_tmp['deaths'], 
             color = 'red', linewidth=2.0, alpha=0.9)
        
    plt.title(f'{cntry}', fontsize=12, fontweight=0)
    plt.xticks([])
    plt.ylim(0,2000)
    
    i = i+1
wykres liniowy dla wielu serii

Jeśli liczba punktów w danych jest niewielka wówczas warto dodatkowo narysować każdą pojedynczą obserwację znacznikiem, np. kropką. Taki wykres nazywamy połączonym wykresem punktowym (ang Connected Scatter plot). Dzięki takim znacznikom łatwiej zwizualizować gdzie są konkretnie wartości.

plt.figure(figsize=(15,5))

sns.lineplot(x='date', y='deaths', 
                  data=df_con[df_con['continentExp']=='Europe'], marker="o", 
                  color='red').set_title(f'Dzienna liczba ofiar z powodu COVID-19 w Europie');
wykres punktowo liniowy

Życzę wspaniałych historii opowiedzianych przez Wasze wykresy liniowe !

Pozdrawiam serdecznie,

podpis Mirek

1 komentarz do “#009 Wykres liniowy (line plot)”

  1. Pingback: #023 Wykres warstwowy (area chart) - Mirosław Mamczur

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *

Spodobało Ci się? Udostępnij ten post w social mediach! ❤️❤️❤️