Start_python’s diary

ふたり暮らし

アラフィフ夫婦のフリーランスプラン

Kivy グラフを表示する(Python Kivyの取説・使い方 第11回)

グラフを表示する方法

今回はMatplotlibモジュールを使ってグラフを表示していきます。BoxLayoutの上にラベル、真ん中にグラフ、下にボタンを表示させたいと思います。

 

f:id:Start_python:20191220164753p:plain

 

プログラムのコード

# フル画面を解除
from kivy.config import Config
Config.set('graphics', 'fullscreen', 0)

from kivy.app import App
from kivy.uix.boxlayout import BoxLayout
from kivy.uix.label import Label
from kivy.garden.matplotlib.backend_kivyagg import FigureCanvasKivyAgg
import numpy as np
import matplotlib.pyplot as plt


class GraphView(BoxLayout):
    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)
        
        fig, ax = plt.subplots()
        x = np.linspace(-4, 4)
        ax.set_xlabel('X label')
        ax.set_ylabel('Y label')
        ax.set_title('Trigonometric functions')
        ax.grid(True)
        ax.plot(x, np.sin(x), label='sin(x)')
        ax.plot(x, np.cos(x), label='cos(x)')
        ax.legend()
        widget = FigureCanvasKivyAgg(fig)
        self.add_widget(widget)


class MainScreen(BoxLayout):
    pass

class TestApp(App):
    def build(self):
        return MainScreen()

if __name__ == '__main__':
    TestApp().run()

kvファイル(test.kv)

<MainScreen>:
    BoxLayout:
        orientation: "vertical"

        Label:
            size_hint_y: 0.2
            text: 'graph of Matplotlib'

        GraphView:

        Button:
            size_hint_y: 0.3
            text: 'button'

<GraphView>:

 

解説

kvファイルに「BoxLayout」を作ってその中に「Label」と「GraphView」と「Button」を作ります。「GraphView」はクラスを作るため「<GraphView>」を作っておきます。

メインプログラムの「class GraphView(BoxLayout):」でグラフを作ります。

fig, ax = plt.subplots()

figure(図全体)とaxes(座標軸)を用意します。

x = np.linspace(-4, 4)

グラフのx軸の範囲

ax.set_xlabel('X label') ax.set_ylabel('Y label')

x軸のラベルとy軸のラベル

ax.set_title('Trigonometric functions')

グラフの上に表示されるタイトル

ax.plot(x, np.sin(x), label='sin(x)')

グラフに描き込む(x値, y値, 凡例用のラベル)

ax.legend()

グラフに凡例を表示する

widget = FigureCanvasKivyAgg(fig)
self.add_widget(widget)

グラフをウィジェットとして追加する

 

 

まとめ

はじめてグラフの表示を勉強しましたが、いろんな場面で使えそうです。アニメーション(動くグラフ)も作ってみたいですが今後の課題にします。

 

 

次回は日本語表示と日本語入力を詳しくやりたいと思います。

 

 

保存ファイル

lesson67.py

 

 

文責:Luke