Python Matplotlib ile Grafik Oluşturma
Kurulum
- Sisteminize
Python 3
kurduktan sonrapython get-pip.py
diyerek Python Package Manager'i kurabilirsiniz. Böylece istediğiniz python paket, kütüphane vs.. kolayca kurabilirsiniz. pip install matplotlib
diyerek kolayca matplotlib'i kurabilirsiniz.
İlk grafik
workspace.py
adında bir dosya oluşturup aşağıdaki kodlarımızı yazalım.
xxxxxxxxxx
import matplotlib.pyplot as plt
plt.plot(
[1, 2, 3, 4, 5, 6, 7],
[9, 3, 6, 9, 3, 7, 5]
)
plt.show()
matplotlib
inpyplot
modülünü import ettik.as plt
diyerek dosyamızın her yerindepyplot
yerineplt
olarak kullanacağımızı belirttik.pyplot
'un (yani projemizdekiplt
'nin)plot
methoduna 2 adet liste verdik.- listemiz grafikteki
x ekseni
ni, 2.listemizy ekseni
ni belirtiyor.
- listemiz grafikteki
plt.show()
diyerek grafiğimizi gösteriyoruz.Terminalden
python workspace.py
diyerek çalıştırdıktan sonra aşağıdaki grafik oluşacak ve ekranda gösterilecek.
- Şimdi kodlarımızı aşağıdaki gibi düzenleyelim
xxxxxxxxxx
import matplotlib.pyplot as plt
x = [1, 2, 3, 4, 5, 6, 7]
y = [9, 3, 6, 9, 3, 7, 5]
plt.plot(x, y, label='Rastgele değerler')
plt.legend()
plt.title("Merhaba matplotlib!")
plt.show()
title
ile grafiğimize başlık ekliyoruz.legend
; gösterilen grafiğin açıklamasını küçük bir kutu içinde gösterir.label
kullanarak grafiğimizin rastgele değerlerden oluştuğunu belirttik.- Şöyle bir senaryomuz olsun; "2 vize 2 final sınavına giren 4 arkadaşın performans grafiği"ni gösterelim.
xxxxxxxxxx
import matplotlib.pyplot as plt
sinavlar = [1, 2, 3, 4] # 1 ve 2 vize 3 ve 4 final
adnan_sonuclar = [60, 90, 70, 50]
hamit_sonuclar = [100, 80, 40, 90]
recep_sonuclar = [70, 80, 90, 96]
mehmet_sonuclar = [40, 60, 100, 98]
plt.plot(sinavlar, adnan_sonuclar, label='Adnan')
plt.plot(sinavlar, hamit_sonuclar, label='Hamit')
plt.plot(sinavlar, recep_sonuclar, label='Recep')
plt.plot(sinavlar, mehmet_sonuclar, label='Mehmet')
plt.xlabel("Sınavlar")
plt.ylabel("Sonuçlar")
plt.legend()
plt.title("Vize & Final\nÖğrenci Performansları")
plt.show()
xlabel
veylabel
ile x ve y eksenlerine isim verebiliyoruz.
Şimdi haftanın 7 günü çalışılan saatleri bar grafiği
olarak gösterelim.
xxxxxxxxxx
import matplotlib.pyplot as plt
days = [1, 2, 3, 4, 5, 6, 7]
work_hours = [8, 12, 10, 16, 6, 7, 3]
plt.bar(days, work_hours, color='#f48042')
plt.xlabel("Günler")
plt.ylabel("Çalışılan Saat")
plt.title("Günlük Çalışma Grafiği")
plt.show()
plt.bar
ile bar grafiği çizdirebiliyoruz.color
ile istediğimiz rengi verebiliriz.- Başka bir örnek olarak 2 kişinin harcamalarını bar grafiği üzerinde görelim.
xxxxxxxxxx
import matplotlib.pyplot as plt
adnan = [1, 3, 5, 7, 9, 11, 13]
kaya = [0, 2, 4, 6, 8, 10, 12]
adnan_payment = [43, 85, 97, 45, 87, 32, 13]
kaya_payment = [73, 35, 73, 45, 15, 60, 88]
plt.bar(adnan, adnan_payment, label='Adnan')
plt.bar(kaya, kaya_payment, label='Kaya')
plt.legend()
plt.title("Adnan ve Kaya Harcamalar")
plt.show()
Bir bölgedeki insanların yaşlarının oranlarını gösteren histogram uygulamasını görelim.
xxxxxxxxxx
import matplotlib.pyplot as plt
import random
# 100 adet rastgele sayı 10 ile 100 arasında üretir
population_ages = [random.randrange(10, 100) for _ in range(100)]
# yaş aralığını 10 ile 100 arasında grafik üzerinde temsil etmesi için
ages = [10, 20, 30, 40, 50, 60, 70, 80, 90, 100]
plt.hist(population_ages, ages, histtype='bar', rwidth=0.5, label='Yaş populasyonu')
plt.ylabel("Sıklık")
plt.xlabel("Yaş")
plt.legend()
plt.title("Nüfus")
plt.show()
histtype
ile histogram tipini bar olarak belirledik.Grafiği x ekseninden başlayarak şöyle okuyabiliriz;
- 20 yaşından küçük 10 kişi (Sıklık yani y ekseni) var.
- 60 ile 70 yaş arasında 14 kişiden fazla insan var.
- 30 ile 40 yaş arasında 6 kişi var.
Gelir ve Giderleri farklı bir grafik modeli scatter
ile gösteren bir uygulama yapalım.
xxxxxxxxxx
import matplotlib.pyplot as plt
import random
months = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]
revenues = [random.randrange(100, 1000) for _ in range(12)]
expenses = [random.randrange(100, 1000) for _ in range(12)]
plt.scatter(months, revenues, label='Gelir', marker='*', s=100)
plt.scatter(months, expenses, label='Gider', marker='o', s=100)
plt.xlabel('Aylar')
plt.ylabel('Tutar')
plt.xticks(months)
plt.legend()
plt.title("Gelir & Gider Grafiği")
plt.show()
plt.scatter
ile farklı bir grafik modeli oluşturuyoruz.marker
parametresi ile verileri nasıl göstereceğimizi söylüyoruz.s=100
diyerek size yani boyutu belirledik.plt.xticks
diyerek x eksenindeki değerleri grafiğin tam göstermesini sağladık. Yani 1'den 12'ye kadar olan bütün değerler. Aksi durumda 2'şerli artan değerler olarak gösteriyordu.
Haftalık faaliyetleri stackplot
grafik modeli ile gösterelim
xxxxxxxxxx
import matplotlib.pyplot as plt
days = [1, 2, 3, 4, 5, 6, 7]
sleeping = [6, 7, 5, 8, 9, 12, 16]
eating = [2, 3, 2, 1, 4, 1, 2]
working = [10, 8, 10, 9, 11, 4, 6]
playing = [1, 2, 1, 3, 2, 1, 3]
labels = ['Uyku', 'Yemek', 'Çalışma', 'Oyun']
plt.stackplot(days,
sleeping,
eating,
working,
playing,
labels=labels)
plt.xlabel('Günler')
plt.ylabel('Faaliyetler')
plt.title("Haftalık Faaliyet Grafiği")
plt.legend()
plt.show()
Pasta dilimi grafik modelini uygulayalım
xxxxxxxxxx
labels = ['Uyku', 'Yemek', 'Çalışma', 'Oyun']
colors = ['c', 'r', '#34ed65', '#f4ee42']
slices = [20,15,55,10] # dilimler
plt.pie(slices,
labels=labels,
colors=colors,
startangle=90,
shadow=True,
explode=(0, 0.1, 0, 0.2),
autopct='%1.2f%%'
)
plt.title("Haftalık Faaliyetler")
plt.show()
plt.pie
ile pasta dilimi grafiği olacağını belirtiyoruz.explode
ile hangi dilimi ne kadar dışarı atacağımızı belirtiyoruz.autopct
ile yüzdeli % olarak gösterebiliyoruz.shadow
gölge efekti verir.startangle
ile dilimlerin nereden başlayacağını (hangi açıdan) belirtiyoruz.
Dosya okunan veri ile grafik işlemi
xxxxxxxxxx
import matplotlib.pyplot as plt
import numpy as np
x, y = np.loadtxt('data.txt', delimiter=',', unpack=True)
plt.plot(x, y, label='Data.txt dosyası grafiği')
plt.xlabel('x değerleri')
plt.ylabel('y değerleri')
plt.title("Dosyadan Okuma")
plt.legend()
plt.show()
data.txt
içeriği:
xxxxxxxxxx
1,3
2,4
3,2
4,8
5,9
6,2
7,3
8,4
9,5
10,7
11,6
12,5
13,7
14,12
15,15
16,17
17,18
18,20
19,10
20,10
30,30
Yorumlar