Python matplotlib ile Fiyat Grafiği Çizip PNG Olarak Kaydetme

kusha · 03 Ağustos 2026 · 5 dk okuma

Bir fiyat serisini sayı listesi olarak görmek yerine, göz ile hızlıca değerlendirebileceğiniz bir grafiğe dönüştürmek çoğu zaman çok daha faydalıdır. Bu derste matplotlib ile bunu yapacağız.

Kurulum

pip install matplotlib

Basit Bir Çizgi Grafiği

Önceki derslerde çektiğimiz kapanış fiyatı verisini kullanalım:

import matplotlib.pyplot as plt
import yfinance as yf

veri = yf.download("BTC-USD", period="1mo", interval="1d")

plt.plot(veri.index, veri["Close"])
plt.title("Bitcoin Fiyat Grafiği (Son 1 Ay)")
plt.xlabel("Tarih")
plt.ylabel("Fiyat (USD)")
plt.show()

plt.show(), grafiği ekranda bir pencere olarak açar — yerel geliştirme sırasında hızlı kontrol için kullanışlıdır.

Grafiği Dosyaya Kaydetmek

Bir botun içinde çalışan bir script'te ekrana pencere açmak mümkün değildir — bunun yerine grafiği bir PNG dosyasına kaydederiz:

plt.plot(veri.index, veri["Close"])
plt.title("Bitcoin Fiyat Grafiği")
plt.xlabel("Tarih")
plt.ylabel("Fiyat (USD)")
plt.savefig("bitcoin_grafik.png")
plt.close()

plt.savefig(...), plt.show() yerine grafiği doğrudan diske yazar. Ardından çağrılan plt.close(), figürü bellekten temizler — özellikle döngü içinde tekrar tekrar grafik çiziyorsanız, close() çağrılmazsa figürler bellekte birikip zamanla belleği şişirebilir.

Birden Fazla Seriyi Aynı Grafikte Göstermek

plt.plot(veri.index, veri["Close"], label="Kapanış Fiyatı")
plt.plot(veri.index, veri["Close"].rolling(7).mean(), label="7 Günlük Ortalama")
plt.legend()
plt.savefig("karsilastirma.png")
plt.close()

.rolling(7).mean(), pandas'ın kendi hareketli ortalama hesaplama yöntemidir — her nokta için önceki 7 günün ortalamasını alır.

Grafiği Telegram'a Fotoğraf Olarak Göndermek

Daha önceki derslerde Telegram Bot API ile metin mesajı göndermiştik; aynı bot ile bir görsel de gönderebilirsiniz:

import requests

def grafik_gonder(dosya_yolu):
    url = f"https://api.telegram.org/bot{TOKEN}/sendPhoto"
    with open(dosya_yolu, "rb") as dosya:
        requests.post(url, data={"chat_id": CHAT_ID}, files={"photo": dosya})

grafik_gonder("bitcoin_grafik.png")

Bu şekilde, periyodik olarak çalışan bir bot her seferinde güncel fiyat grafiğini çizip doğrudan Telegram kanalınıza gönderebilir.

Grafiği Daha Okunur Yapmak

plt.figure(figsize=(10, 5))     # daha geniş bir grafik
plt.grid(True, alpha=0.3)       # hafif bir arka plan ızgarası
plt.xticks(rotation=45)         # tarih etiketlerini eğerek okunabilirliği artırır

Sırada Ne Var?

Sırada, farklı bir konuya geçip pyautogui ile ekranda belirlediğiniz sabit bir koordinata otomatik olarak tıklayan basit bir bot yazmayı göreceğiz.