web-dev-qa-db-ja.com

kivyでリアルタイムグラフを作成するにはどうすればよいですか?

Kivyでリアルタイムグラフを作成したいです。どうすればそれを達成できますか?私はkivyは初めてです。私を助けてください。

13
gigahex

プロットを定義する

例えば.

plot = MeshLinePlot(color=next(colors))

グラフを定義する

例えば.

graph = Graph(
    xlabel='Iteration',
    ylabel='Value',
    x_ticks_minor=1,
    x_ticks_major=5,
    y_ticks_major=1,
    y_grid_label=True,
    x_grid_label=True,
    padding=5,
    xlog=False,
    ylog=False,
    x_grid=True,
    y_grid=True,
    ymin=0,
    ymax=11,
    **graph_theme)

グラフを更新し、x軸を更新します。

例えば.

    def update_xaxis(self,*args):
        global graph
        global cnt
        graph.xmin = cnt - 50
        graph.xmax = cnt

    def update_points(self, *args):
        global i
        global MYLIST
        global cnt

        #self.plot.points = [(i,i)]
        self.plot.points = [z for z in MYLIST]

時計を呼ぶ

例えば.

        Clock.schedule_interval(self.update_points, 1/60.)
        Clock.schedule_interval(self.update_xaxis, 1/60.)

ウィジェットを追加します。

        b.add_widget(graph)

私は何も忘れていないことを願っています。それはあなたにkivyGardenでランニンググラフを与えます。

7
BlueDog

kivy garden にグラフウィジェットがあります。 kivyの ドキュメント でガーデンウィジェットの使用について読むことができます。

8
inclement

Kivyでリアルタイムグラフを作成しようとしています。

Youscope

私はYouscopeから始めました。次のYouTubeビデオで見ることができるyouscopeのデモ https://www.youtube.com/watch?v=-1E0DpQ_cFo

そして、ソースコードはここにあります: https://code.google.com/p/felipesanches/source/browse/trunk/youscope-emu/youscope-emu.py

Pygameで記述されており、入力ソースとしてWaveオーディオファイルを使用しますが、他のソース(シリアルデータや計算された曲線など)を使用することもできます。

Youscopeの問題は、そこからAndroid用のAPKを作成できないことです。 pythonのAndroidサブセットをインストールしようとしましたが、ビルド時に常にエラーメッセージが表示されます。 (何が問題なのかわかりません。)

そこで、Buildozerを使用してAndroid AP​​Kを作成できるため、YouscopeコードをKivyに移植することにしました。 (グラフ作成アプリを構築するためのテストはまだ行われていませんが、機能するはずです。)

Kivyを使用したYouscope

描画は元のコードと同じくらい速くkivyで実行されるようですが、現時点では曲線の再描画で立ち往生しています。でも、ポイントの計算に時間がかかりすぎて、描画が速くなるはずだと思います。入力としてWAVファイルをチェックする必要があると思います。それが速いかどうか。

Clock.schedule_intervall(Kivy)とゲームループ(Pygame)

Kivyのソースはpygameコードとかなり似ていますが、Kivyではwhileループのあるゲームループはありません。 Kivyでは、画面の更新/描画にClock.schedule_intervall(callback、time_in_sec)( http://kivy.org/docs/api-kivy.clock.html を参照)でコールバックを使用しています。

描画にフレームバッファを使用する

描画には、キャンバスに追加されたフレームバッファを使用する必要があります。 http://kivy.org/docs/api-kivy.graphics.fbo.html を参照してください

曲線は、左から右に1点ずつ描画されます。再描画とは、フレームバッファーに最初の曲線(計算された正弦波を使用)を描画し、画面の右端に到達した後、新しい曲線で再び左から描画を開始することを意味します。

そして今でも、以前に描いた曲線をクリアする必要があります。ここで画面全体を再描画できますが、古い行を1つずつ削除するよりもおそらく時間がかかります。

ここでの難しさは、古い曲線の下にある背景色を復元することです。間違ったピクセルの色を取得しているように見えますが、何が問題なのかわかりません。

画面を更新するためのGet_pixel_color()

Framebuffer.get_pixel_color(wx、wy)(Kivy 1.8.0が必要)を使用すると、rgbaのピクセルの色を取得できますが、これは正しく機能していません。更新の問題かもしれませんが、よくわかりません。

黒のピクセル(get_pixel_colorなし)でのクリアは機能していますが、背景グリッドが削除されます。

4
AWolf