Python ile Anlık Canlı Verilerle Grafik Oluşturmak

Merhaba ,
Python ile sürekli olarak finansal veriler çekiyorum bunları grafik üzerinde göstermek istiyorum yalnız matplotlib ile bunu ancak for döngüsü ile her seferinde sıfırdan tekrar grafiği çizdirerek yapabiliyorum bunun başka bir yolu var mıdır grafiği komple çizdirmek yerine investing veya tradingview tarzındaki sitelerdeki gibi veri üzerine eklendikçe eklenen verilerin grafiğin üzerinde eklenmesi için nasıl bir yol izleyebilirim.

Teşekkür ederim.

Merhaba, bir çok yöntem var ama geçen gün bir iş için gerektiğinden yakın zamanda kullandığım bir kütüphaneyi tavsiye edeceğim.

Plotly Dersleri-1. Python ana akım görselleştirme… | by Hakkı Kaan Simsek | Deep Learning Türkiye | Medium

Kolay gelsin.

3 Beğeni

Teşekkür ederim, sağolun.

1 Beğeni

Belirttiğiniz dokümanı okudum yalnız belirttiğim gibi güncelleme kısmında bu açıklamada komple grafiği sıfırdan çizerek ilerliyor belki 5 dakika da bir çizilen grafikler için sorun olmayabilir yalnız her saniye güncellendiği zaman sorunlar ortaya çıkmaya başlıyor bu konuda başka belirtebileceğiniz bir yöntem var mıdır for döngüsüne çalışırken sadece eklenen yeni verilerin grafiğe eklenmesi ve grafiğin bu şekilde genişleyebilmesi için bir yöntem mevcut mudur?

Veri setinizin görünecek kısmını( ekranda görünecek kısmını) bir stack yada buffer içinde tutabilirsiniz.

Yani belirli boyutta bir veri setini görüntüleyebilir ve bunu kaydırarak listenizi veri setinizi sabit tutarken eski veriyi görüntülenecek listeden eksiltirsiniz.

LIFO metodu ile hep son belirli uzunluktaki aldığınız veriyi çizersiniz.

Yani çok büyük bir veriyi tek seferde çizmek uzun sürecektir. Bunun yerine çerçeve çerçeve kaydırdığınızı ve verinin ekranda göründüğü kısmını çizdirdiğiniz hayal edin.

Deneyin, zorlanırsanız örnekleriz.

Kolay gelsin.

EDIT:

Plot Live Graphs using Python Dash and Plotly - GeeksforGeeks

[kodu buraya gir veya yapıştır](https://www.geeksforgeeks.org/plot-live-graphs-using-python-dash-and-plotly/)

plotly ve dash kütüphaneleri ile yapılmış bir örnek:

import dash
from dash.dependencies import Output, Input
import dash_core_components as dcc
import dash_html_components as html
import plotly
import random
import plotly.graph_objs as go
from collections import deque
  
X = deque(maxlen = 20)
X.append(1)
  
Y = deque(maxlen = 20)
Y.append(1)
  
app = dash.Dash(__name__)
  
app.layout = html.Div(
    [
        dcc.Graph(id = 'live-graph', animate = True),
        dcc.Interval(
            id = 'graph-update',
            interval = 1000,
            n_intervals = 0
        ),
    ]
)
  
@app.callback(
    Output('live-graph', 'figure'),
    [ Input('graph-update', 'n_intervals') ]
)
  
def update_graph_scatter(n):
    X.append(X[-1]+1)
    Y.append(Y[-1]+Y[-1] * random.uniform(-0.1,0.1))
  
    data = plotly.graph_objs.Scatter(
            x=list(X),
            y=list(Y),
            name='Scatter',
            mode= 'lines+markers'
    )
  
    return {'data': [data],
            'layout' : go.Layout(xaxis=dict(range=[min(X),max(X)]),yaxis = dict(range = [min(Y),max(Y)]),)}
  
if __name__ == '__main__':
    app.run_server()

Kodu çalıştırdıktan sonra;

Web tarayıcınızdan http://localhost:8050/ adresine girerek grafiği canlı olarak görebilirsiniz.

Yine matplot üzerinden;

Python Realtime Plotting | Matplotlib Tutorial | Chapter 9-SaralGyaan

# python_live_plot.py

import random
from itertools import count
import matplotlib.pyplot as plt
from matplotlib.animation import FuncAnimation

plt.style.use('fivethirtyeight')

x_values = []
y_values = []

index = count()


def animate(i):
    x_values.append(next(index))
    y_values.append(random.randint(0, 5))
    plt.cla()
    plt.plot(x_values, y_values)


ani = FuncAnimation(plt.gcf(), animate, 1000)


plt.tight_layout()
plt.show()

Üzerinden grafikği çizdirebilirsiniz.

Hangi kütüphaneyi seçerseniz seçin, veriniz çok büyük ise, sadece çerçeve bir veri seti kullanıp bu seti güncelleyerek kaydırmanızda fayda var, büyük bir veriyi grafik olarak çizdirdiğinizde hem veri güncellemesi, hem de okuması zor olacaktır.

Söylediğim gibi birini seçin deneyin üzerinde yapamadığınız kısımlara bakabiliriz.

plotly web servisi gibi tarayıcıda görüntülendiğinden hoşuma gitmişti. matplot kütüphanesine karşı değilim.

2 Beğeni

Verdiginiz yanitlar icin tesekkur ederim temelde birseyi anlamak icin ek sorum olacak bu tarz kutuphaneler her veri eklenmesi ile grafigi yeniden cizdirmek uzerine mi kurulu. Grafikte suraya kadar veriyi tekrar cizmeye calisma o kisim cizilmis sekilde dursun gibi bisey deme yolu var midir? Yanitlariniz icinde bu soruma cevap verdiginiz kismi kacirdiysam kusura bakmayin.

Aslında tüm işletim sisteminiz, tüm ekranı yeniden çizmek üzerine kurulu. Kısa sürede tüm ekran yeniden tazelenir. Yani kütüphanelerin çalışma mantığından kaynaklı değil.

Zaten FPS yada tazeleme hızı gibi kavramlar olduğu sürece her şey yeniden hızlıca çizilir,ekranlar statik değildir. Bir yanılsama ile durağan görürüz.

Bence olayın yanlış kısmına odaklanıyoruz. Veriniz çok büyük ve çizilmesi çok uzun sürüyorsa zaten hepsini ekranda tutmanız mümkün olmayacaktır. Hem grafikte göremez hemde çizilmesi uzun sürecektir.

Bunun yerine ekleme yanılsaması sağlayan verdiğim örneklerdeki gibi belli bir kısmını ekrana görüntülersiniz.

Ekranı bir kağıt gibi sabit düşünmeyin.

1 Beğeni

Dediginiz gibi ilerlemeye calisacagim açıklamalarıniz icin tekrardan tesekkur ederim.

1 Beğeni