Çizgi grafiği, bir sürekli değişken diğerine bağlı olarak değiştiğinde bu değişimi gösteren ilişkisel bir veri görselleştirmesidir. Finans, satış, pazarlama, sağlık, doğa bilimleri ve daha birçok alanda yaygın biçimde kullanılan en temel grafiklerden biridir.
Bu eğitimde, popüler bir Python veri görselleştirme kütüphanesi olan Seaborn’u kullanarak Python’da çizgi grafikleri nasıl oluşturup özelleştireceğimizi ele alacağız.
Veri Kümesinin Tanıtımı
Seaborn çizgi grafikleri üzerinde pratik yapmak için önce 1999-2024 Euro Başına Günlük Kur adlı bir Kaggle veri kümesini indireceğiz. Ardından gerekli tüm paketleri içe aktaracak, veri çerçevesini okuyup temizleyeceğiz. Temizleme sürecinin ayrıntılarına girmeden, aşağıdaki kod adımların nasıl uygulanacağını gösteriyor:
import seaborn as sns
import matplotlib.pyplot as plt
import pandas as pd
daily_exchange_rate_df = pd.read_csv('euro-daily-hist_1999_2022.csv')
daily_exchange_rate_df = daily_exchange_rate_df.iloc[:, [0, 1, 4, -2]]
daily_exchange_rate_df.columns = ['Date', 'Australian dollar', 'Canadian dollar', 'US dollar']
daily_exchange_rate_df = pd.melt(daily_exchange_rate_df, id_vars='Date', value_vars=['Australian dollar', 'Canadian dollar', 'US dollar'], value_name='Euro rate', var_name='Currency')
daily_exchange_rate_df['Date'] = pd.to_datetime(daily_exchange_rate_df['Date'])
daily_exchange_rate_df = daily_exchange_rate_df[daily_exchange_rate_df['Date']>='2022-12-01'].reset_index(drop=True)
daily_exchange_rate_df['Euro rate'] = pd.to_numeric(daily_exchange_rate_df['Euro rate'])
print(f'Currencies: {daily_exchange_rate_df.Currency.unique()}\n')
print(df.head())
print(f'\n{daily_exchange_rate_df.Date.dt.date.min()}/{ daily_exchange_rate_df.Date.dt.date.max()}')
Çıktı:
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
Elde edilen veri çerçevesi, 01.12.2022 ile 27.01.2023 (dahil) tarihleri arasındaki dönemde Avustralya, Kanada ve ABD dolarları için günlük (iş günleri) Euro kurlarını içerir.
Artık Python Seaborn çizgi grafikleri oluşturmaya ve özelleştirmeye dalmaya hazırız.
Seaborn Çizgi Grafiği Temelleri
Seaborn’da bir çizgi grafiği oluşturmak için iki işlevden birini kullanabiliriz: lineplot() veya relplot(). Genel olarak, ortak çok sayıda işlevselliğe ve aynı parametre adlarına sahiptirler. Temel fark, relplot()’un farklı yüzeylerde (facet) birden fazla çizgiyle çizgi grafikleri oluşturmaya imkan vermesidir. Buna karşılık lineplot(), güven aralıkları ve veri toplulaştırmasıyla çalışmaya olanak tanır.
Bu eğitimde çoğunlukla lineplot() işlevini kullanacağız.
Seaborn ile Veri Görselleştirmeye Giriş kursu, seaborn kütüphanesinin temel işlev ve yöntemlerini öğrenmenize ve pratik etmenize yardımcı olacaktır. Popüler Python kütüphanesini daha yakından tanımak için başlangıç seviyesi Seaborn eğitimimize de göz atabilirsiniz.
Tek bir seaborn çizgi grafiği oluşturma
Aşağıdaki gibi iki sürekli değişken arasındaki ilişkiyi gösteren bir çizgi grafiği oluşturabiliriz:
usd = daily_exchange_rate_df[daily_exchange_rate_df['Currency']=='US dollar'].reset_index(drop=True)
sns.lineplot(x='Date', y='Euro rate', data=usd)
Çıktı:

Yukarıdaki grafik EUR-USD kur dinamiklerini gösteriyor. Çizdirilecek değişkenleri x ve y eksenlerinde (x ve y parametreleri) ve bu değişkenlerin alınacağı veri çerçevesini (data) tanımladık.
Kıyaslamak için, aynı grafiği relplot() ile oluşturmak isteseydik şunu yazardık:
sns.relplot(x='Date', y='Euro rate', data=usd, kind='line')
Çıktı:

Bu durumda, relplot() işlevine özgü bir argüman daha geçirdik: kind='line'. Varsayılan olarak bu işlev bir saçılım grafiği oluşturur.
Tek bir seaborn çizgi grafiğini özelleştirme
Yukarıdaki grafiği daha okunabilir ve bilgilendirici hale getirmek için birçok şekilde özelleştirebiliriz. Örneğin, şekil boyutunu ayarlayabilir, başlık ve eksen etiketleri ekleyebilir, yazı tipi boyutunu değiştirebilir, çizgiyi özelleştirebilir, işaretçiler ekleyip bunları özelleştirebiliriz. Bu iyileştirmelerin seaborn’da nasıl yapılacağını görelim.
Şekil boyutunu ayarlama
Seaborn, matplotlib üzerine kurulu olduğundan, şekil boyutunu ayarlamak için matplotlib.pyplot kullanabiliriz:
fig = plt.subplots(figsize=(20, 5))
sns.lineplot(x='Date', y='Euro rate', data=usd)
Çıktı:

Bunun yerine, relplot() ile aynı amaçla height ve aspect (genişlik/yükseklik oranı) parametrelerini kullanabiliriz:
sns.relplot(x='Date', y='Euro rate', data=usd, kind='line', height=6, aspect=4)
Çıktı:

Başlık ve eksen etiketleri ekleme
Grafik başlığı ve eksen etiketleri eklemek için seaborn çizgi grafik nesnesi üzerinde set() işlevini, title, xlabel ve ylabel argümanlarını geçirerek kullanabiliriz:
fig = plt.subplots(figsize=(20, 5))
sns.lineplot(x='Date', y='Euro rate', data=usd).set(title='Euro-USD rate', xlabel='Date', ylabel='Rate')
Çıktı:

Yazı tipi boyutunu ayarlama
Yazı tipi boyutunu ayarlamanın kullanışlı bir yolu, set_theme() işlevini kullanmak ve font_scale parametresinin farklı değerlerini denemektir:
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)
Çıktı:

Ayrıca, başlangıç stilinin üzerine yazılmasını önlemek için style='white' da eklediğimize dikkat edin.
Çizgi rengi, stili ve kalınlığını değiştirme
Grafik çizgisini özelleştirmek için, color, linestyle veya linewidth gibi matplotlib.pyplot.plot ile ortak bazı isteğe bağlı parametreleri geçirebiliriz:
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)
Çıktı:

İşaretçiler ekleme ve renk, stil, boyutlarını özelleştirme
Çizgi üzerine işaretçiler eklemek ve görünümlerini özelleştirmek mümkündür. Bu durumda da marker, markerfacecolor veya markersize gibi matplotlib parametrelerini kullanabiliriz:
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)
Çıktı:

Belgeler, bir seaborn çizgi grafiğinin estetiğini iyileştirmek için kullanılabilecek parametrelerin kapsamlı bir listesini sunar. Özellikle, tüm olası işaretçi seçeneklerini görebiliriz.
Seaborn hızlı başvuru kağıdımızda, Seaborn’da bir çizgi grafiğini özelleştirmenin diğer yollarını bulacaksınız.
Birden Fazla Çizgili Seaborn Çizgi Grafikleri
Çoğu zaman, birden çok sürekli değişkenin başka bir sürekli değişkene bağlı olarak nasıl değiştiğini incelememiz gerekir. Bu amaçla, birden fazla çizgi içeren bir seaborn çizgi grafiği oluşturabiliriz. lineplot() ve relplot() işlevleri bu durumlar için de uygundur.
Birden fazla çizgili seaborn çizgi grafiği oluşturma
Teknik olarak, her bağımlı değişken için, yani her çizgi için ayrı bir eksen nesnesi oluşturarak birden fazla çizgili seaborn çizgi grafiği yapmak mümkündür:
aud = daily_exchange_rate_df[daily_exchange_rate_df['Currency']=='Australian dollar'].reset_index(drop=True)
cad = daily_exchange_rate_df[daily_exchange_rate_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)
Çıktı:

Yukarıda, ilk veri çerçevemiz daily_exchange_rate_df’den – Avustralya ve Kanada doları için – iki alt küme daha çıkardık ve her bir Euro kurunu zamana karşı çizdirdik. Ancak, daha verimli çözümler de vardır: hem lineplot() hem de relplot()’ta bulunan hue, style veya size parametrelerini kullanmak.
hue parametresini kullanma
Bu parametre şu şekilde çalışır: Kategorik değerler içeren bir veri çerçevesi sütununun adını atarız ve ardından seaborn, her kategori için farklı bir renkte çizgi üreterek bir çizgi grafiği oluşturur:
sns.lineplot(x='Date', y='Euro rate', data=daily_exchange_rate_df, hue='Currency')
Çıktı:

Sadece tek satırlık basit bir kodla üç kategori için seaborn çizgi grafiği oluşturduk. Fark edeceğiniz üzere, farklı para birimleri için alt kümeler yerine başlangıç veri çerçevesi daily_exchange_rate_df’yi geçirdik.
style parametresini kullanma
style parametresi, renkleri etkilemeden (düz, kesik, noktalı vb.) farklı çizgi stilleri kullanarak kategorileri ayırt etmesi dışında, hue ile aynı şekilde çalışır:
sns.lineplot(x='Date', y='Euro rate', data=daily_exchange_rate_df, style='Currency')
Çıktı:

size parametresini kullanma
hue ve style gibi, size parametresi de her kategori için ayrı bir çizgi oluşturur. Renk ve stili etkilemez ancak her birinin kalınlığını farklı yapar:
sns.lineplot(x='Date', y='Euro rate', data=daily_exchange_rate_df, size='Currency')
Çıktı:

Birden fazla çizgili seaborn çizgi grafiğini özelleştirme
Şimdi grafiğimizin estetiğiyle deney yapalım. Buradaki bazı teknikler, tek bir Seaborn çizgi grafiğine uyguladıklarımızla aynıdır. Diğerleri ise yalnızca çok çizgili çizgi grafiklere özgüdür.
Genel ayarlamalar
Şekil boyutunu ayarlama, başlık ve eksen etiketleri ekleme ve yazı tipi boyutunu değiştirme işlemlerini, tek çizgili grafikte yaptığımızla aynı şekilde yapabiliriz:
fig = plt.subplots(figsize=(20, 5))
sns.lineplot(x='Date', y='Euro rate', data=daily_exchange_rate_df, hue='Currency').set(title='Farklı para birimleri için Euro kurları', xlabel='Date', ylabel='Rate')
sns.set_theme(style='white', font_scale=3)
Çıktı:

Her bir çizginin renk, stil ve kalınlığını değiştirme
Daha önce, hue, style veya size parametreleri kullanıldığında seaborn’un çok çizgili bir grafik için varsayılan bir renk/stil/kalınlık seti sağladığını görmüştük. Gerekirse bu varsayılanları geçersiz kılıp renk/stil/kalınlıkları kendimiz seçebiliriz.
hue parametresini kullandığımızda, palette argümanını matplotlib renk adlarından oluşan bir liste veya demet olarak da geçebiliriz. Renk kuramını daha iyi anlamak ve görsellerinizi güzelleştirecek pek çok iyi fikir edinmek için eğitimimize, Seaborn Renk Paleti: Renk Seçimi için Hızlı Rehber’e göz atmanızı öneririm.
fig = plt.subplots(figsize=(20, 5))
sns.lineplot(x='Date', y='Euro rate', data=daily_exchange_rate_df, hue='Currency', palette=['magenta', 'deepskyblue', 'yellowgreen']).set(title='Farklı para birimleri için Euro kurları', xlabel='Date', ylabel='Rate')
sns.set_theme(style='white', font_scale=3)
Çıktı:

Mevcut bir matplotlib paletini doğrudan uygulamak da mümkündür:
fig = plt.subplots(figsize=(20, 5))
sns.lineplot(x='Date', y='Euro rate', data=daily_exchange_rate_df, hue='Currency', palette='spring').set(title='Farklı para birimleri için Euro kurları', xlabel='Date', ylabel='Rate')
sns.set_theme(style='white', font_scale=3)
Çıktı:

Aynı zamanda, hue kullanırken linestyle ve linewidth argümanlarını geçirerek tüm çizgilerin stilini ve kalınlığını ayarlayabiliriz:
fig = plt.subplots(figsize=(20, 5))
sns.lineplot(x='Date', y='Euro rate', data=daily_exchange_rate_df, hue='Currency', palette=['magenta', 'deepskyblue', 'yellowgreen'], linestyle='dashed', linewidth=5).set(title='Farklı para birimleri için Euro kurları', xlabel='Date', ylabel='Rate')
sns.set_theme(style='white', font_scale=3)
Çıktı:

Bunun yerine, style parametresini kullanarak çok çizgili seaborn çizgi grafiği oluşturduğumuzda, dashes adlı bir parametreye liste (veya demet) içinde listeler (veya demetler) atayabiliriz:
fig = plt.subplots(figsize=(20, 5))
sns.lineplot(x='Date', y='Euro rate', data=daily_exchange_rate_df, style='Currency', dashes=[[4, 4], [6, 1], [3, 9]]).set(title='Farklı para birimleri için Euro kurları', xlabel='Date', ylabel='Rate')
sns.set_theme(style='white', font_scale=3)
Çıktı:

Yukarıda dashes’a atanan liste içindeki her alt listenin ilk öğesi, karşılık gelen çizginin parça uzunluğunu; ikinci öğe ise boşluk uzunluğunu temsil eder.
Not: Düz bir çizgiyi temsil etmek için, boşluk uzunluğunu sıfır yapmamız gerekir, örn.: [1, 0].
Bu grafikteki tüm çizgilerin rengini ve kalınlığını ayarlamak için, tek bir seaborn çizgi grafiğini özelleştirirken yaptığımız gibi color ve linewidth argümanlarını sağlayabiliriz:
fig = plt.subplots(figsize=(20, 5))
sns.lineplot(x='Date', y='Euro rate', data=daily_exchange_rate_df, style='Currency', dashes=[[4, 4], [6, 1], [3, 9]], color='darkviolet', linewidth=4).set(title='Farklı para birimleri için Euro kurları', xlabel='Date', ylabel='Rate')
sns.set_theme(style='white', font_scale=3)
Çıktı:

Son olarak, birden fazla çizgili seaborn çizgi grafiği oluşturmak için size parametresini kullandığımızda, her bir çizginin kalınlığını sizes parametresiyle düzenleyebiliriz. Bu parametre bir tamsayı listesi (veya demeti) alır:
fig = plt.subplots(figsize=(20, 5))
sns.lineplot(x='Date', y='Euro rate', data=daily_exchange_rate_df, size='Currency', sizes=[2, 10, 5]).set(title='Farklı para birimleri için Euro kurları', xlabel='Date', ylabel='Rate')
sns.set_theme(style='white', font_scale=3)
Çıktı:

Bu grafikteki tüm çizgilerin rengini ve stilini özelleştirmek için linestyle ve color argümanlarını sağlamamız gerekir:
fig = plt.subplots(figsize=(20, 5))
sns.lineplot(x='Date', y='Euro rate', data=daily_exchange_rate_df, size='Currency', sizes=[2, 10, 5], linestyle='dotted', color='teal').set(title='Farklı para birimleri için Euro kurları', xlabel='Date', ylabel='Rate')
sns.set_theme(style='white', font_scale=3)
Çıktı:

İşaretçiler ekleme ve renk, stil, boyutlarını özelleştirme
Seaborn çok çizgili grafiğimize işaretçiler eklemek isteyebiliriz.
Tüm çizgiler üzerinde aynı renk, stil ve boyutta işaretçiler eklemek için, tek çizgili grafikte yaptığımız gibi marker, markerfacecolor, markersize vb. matplotlib parametrelerini kullanmalıyız:
fig = plt.subplots(figsize=(20, 5))
sns.lineplot(x='Date', y='Euro rate', data=daily_exchange_rate_df, hue='Currency', marker='o', markerfacecolor='orangered', markersize=10).set(title='Farklı para birimleri için Euro kurları', xlabel='Date', ylabel='Rate')
sns.set_theme(style='white', font_scale=3)
Çıktı:

Ancak, her çizgi için farklı işaretçiler istediğimizde durum değişir. Bu durumda, seaborn işlevselliğine göre yalnızca style parametresi belirtildiğinde çalışan markers parametresini kullanmamız gerekir:
fig = plt.subplots(figsize=(20, 5))
sns.lineplot(x='Date', y='Euro rate', data=daily_exchange_rate_df, style='Currency', markers=['o', 'X', '*'], markerfacecolor='brown', markersize=10).set(title='Farklı para birimleri için Euro kurları', xlabel='Date', ylabel='Rate')
sns.set_theme(style='white', font_scale=3)
Çıktı:

Yukarıdaki grafikte, dashes argümanını sağlayıp her çizgiye [1, 0] stil desenini atayarak tüm çizgileri düz hale getirebiliriz:
fig = plt.subplots(figsize=(20, 5))
sns.lineplot(x='Date', y='Euro rate', data=daily_exchange_rate_df, style='Currency', markers=['o', 'X', '*'], dashes=[[1, 0], [1, 0], [1, 0]], markerfacecolor='brown', markersize=10).set(title='Farklı para birimleri için Euro kurları', xlabel='Date', ylabel='Rate')
sns.set_theme(style='white', font_scale=3)
Çıktı:

Sonuç
Özetle, bu eğitimde, tek veya birden fazla çizgiden oluşan bir Seaborn çizgi grafiğini oluşturmanın ve özelleştirmenin çeşitli yollarını öğrendik.
İleriye dönük olarak, seaborn ile bir çizgi grafiğini daha da ayarlamak adına çok daha fazlasını yapabiliriz. Örneğin:
- Çizgileri birden fazla kategorik değişkene göre gruplamak
- Lejandı özelleştirmek
- Farklı yüzeylerde birden fazla çizgili çizgi grafikleri oluşturmak
- Güven aralığını göstermek ve özelleştirmek
- Zaman serisi çizgi grafiği için zaman ekseni işaretlerini ve etiketlerini özelleştirmek
Seaborn ile neler yapılabileceğini ve nasıl yapılacağını daha derinlemesine incelemek için Seaborn ile Orta Düzey Veri Görselleştirme kursumuzu değerlendirebilirsiniz.
Seaborn Çizgi Grafiği SSS
Seaborn’da çizgi grafiği nedir?
Çizgi grafiği, Seaborn’da iki değişken arasındaki ilişkiyi veri noktalarını düz bir çizgiyle birleştirerek gösteren bir grafik türüdür.
Seaborn’da çizgi grafiği için en uygun veri türü nedir?
Çizgi grafikleri, iki değişken arasında net bir ilişki bulunan ve değişkenlerin sürekli veya sıralı (ordinal) olduğu veriler için en uygunudur.
Seaborn’da aynı grafikte birden fazla çizgi çizebilir miyim?
Evet, Seaborn’da aynı grafikte birden fazla çizgi çizebilirsiniz; bunun için veriyi gruplamak üzere kategorik bir değişkeni belirtmek amacıyla hue parametresini kullanabilirsiniz.
Seaborn’da çizgi grafiği ile saçılım grafiği arasındaki fark nedir?
Seaborn’da bir çizgi grafiği iki değişken arasındaki ilişkiyi düz bir çizgiyle gösterirken, saçılım grafiği bu ilişkiyi tek tek veri noktalarıyla gösterir.
Seaborn’daki çizgi grafiğime regresyon çizgisi ekleyebilir miyim?
Evet, Seaborn’daki çizgi grafiğinize regplot() işlevini kullanarak bir regresyon çizgisi ekleyebilirsiniz; bu işlev iki değişken arasında doğrusal bir regresyon modeli uydurup çizer.
Seaborn çizgi grafiğimi bir dosyaya nasıl kaydederim?
Seaborn çizgi grafiğinizi bir dosyaya kaydetmek için, geçerli şekli belirtilen dosya yolu ve biçimde kaydeden matplotlib kütüphanesindeki savefig() işlevini kullanabilirsiniz.
