Grafik üzerindeki iki nokta arasına çizgi çekmek

Merhaba arkadaşlar.
Python kullanarak Binance’tan verilerimi çekip matplotlib ile de grafik çizdiriyorum.
Oluşturduğum grafiğe de trend çizgisi çizmek istiyorum ancak yapamadım.
Veriler Api anahtarı aracılığıyla direkt Binance’tan geldiği için örnek olması açısından array oluşturup belirteceğim. Ancak kodu kopyalayıp editöre atarsanız çalışacaktır. Eksiksiz yazdım.

Binance’tan gelen veriler ile oluşturduğum grafik çıktısı şu şekilde;
Grafik üzerinde kırmızı noktalar ile de çizgiyi nereden nereye çekmek istediğimi belirttim.

Trend çizgisini de grafik üzerine atmak istediğim zaman ise grafik şu hale geliyor;

Örnek kod şu şekilde;


KapanisFiyatlari = np.array([44.000, 42.000, 40.000, 35.000, 28.000, 20.000, 15.000, 10.000, 13.000, 16.000, 20.000, 23.000, 25.000, 30.000, 35.000, 38.000, 41.000, 43.000, 45.000]) # bunun binance'tan gelen kapanış verileri olduğunu düşünelim.

Min = KapanisFiyatlari.min() # en düşük kapanış fiyatını alıyorum
Max = KapanisFiyatlari.max() # en yüksek kapanış fiyatını alıyorum.

Trend = [Min, Max] # iki veriyi tek array haline getiriyorum.

plt.plot(KapanisFiyatlari) # burası bana ilk resimdeki grafiği istediğim şekilde veriyor.
plt.plot(Trend) # üzerinde çizgiyi çekmek istediğim zaman ise ikinci resimdeki gibi ilginç görüntü ortaya çıkıyor. 
plt.show()

ayrıca;


plt.plot(Trend) # burayı tek kullandığım zaman çizgi istediğim gibi de oluyor. Onun da ekran resmini ekliyorum.

Kısacası ikisini düzgün şekilde birleştiremedim. Matplotlib’te iyi değilim, yeni başladım. O yüzden beceremedim.
şimdiden herkese teşekkürler.

Kapanış fiyatları çok sayıda değer içeriyorken Trend sadece iki değerden oluşuyor.
Dolayısıyla ikisini de tek bir grafik üzerinde göstermek istediğinizde Trend sadece 0 ve 1 numaralı yerlere çiziliyor.
Kapanış fiyatları ise 0’dan 500’e kadar olan yerlere (veya kaç taneyse) çiziliyor.

Bu yüzden Trend’deki Min ve Max değerlerinin kaç numaralı yerlere çizileceği ile ilgili bilgi vermeniz gerekiyor. Bunun için de şu satırı şununla değiştirmelisiniz.

plt.plot([0, len(KapanisFiyatlari) - 1], Trend)

resim_2022-02-11_160634

2 Beğeni

Çok teşekkür ederim @Gok_Mavisi_Anka

Bu arada;


plt.plot([0, len(KapanisFiyatlari) - 1], Trend) 

0 başlangıç noktası, len(KapanisFiyatlari) -1 'de sondan bir öncekiye kadar çiz demiş oluyoruz anladığım kadarıyla.

1 Beğeni

Rica ederim.

0 başlangıç noktası, len(KapanisFiyatlari) - 1 ise son nokta oluyor.
Başlangıç noktası 0’dan başladığı için diğeri son nokta oluyor. Eğer 1’den başlasaydı dediğiniz gibi sondan bir önceki olurdu.

1 Beğeni

Yukarıda da bahsedildiği üzere plt.plot'a tek argüman paslarsanız, x-ekseni için, o pasladığınızın uzunluğu N ise, 0, 1, …, N-1 değerleri varsayılıyor. Minimumdan maksimuma çizdirmek istiyorsanız, onların verideki pozisyonunu bulabilirsiniz argmin ve argmax ile

trend_x = [kapanis_fiyatlari.argmin(), kapanis_fiyatlari.argmax()]
trend_y = [kapanis_fiyatlari.min(), kapanis_fiyatlari.max()]
plt.plot(trend_x, trend_y)

(İsterseniz argmin ve argmax üzerinden minimum ve maksimumu (tekrar hesaplamaksızın) bulabilirsiniz kapanis_fiyatlari[kapanis_fiyatlari.argmin()]'den yola çıkarak ama burada gerek yok gibi duruyor.)

2 Beğeni

@Gok_Mavisi_Anka , @anon18277073 cevaplarınız ve ilginiz için teşekkür ederim tekrardan.

1 Beğeni